VUE侧边导航栏实现筛选过滤的示例代码

 更新时间:2023年05月17日 09:43:11   作者:晚风予星  
本文主要介绍了VUE侧边导航栏实现筛选过滤的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

需求

实现侧边导航栏的同时,需要实现筛选功能。且由于导航名称中可能包含大写英文字母,所以还需要支持小写英文字母筛选。

筛选效果:

2023-05-14 20.29.01.gif

2023-05-14 20.29.30.gif

清除筛选条件:

2023-05-14 20.29.53.gif

思路

  • 监听el-input的回车事件:@keydown.enter.native
  • 将父组件传过来的导航栏数据进行深拷贝一层,并新建一个数组newMenuList进行存储匹配的导航栏数据:const copySideMenuList = JSON.parse(JSON.stringify(this.sideMenuList));
    • 深拷贝一层,为了防止原数据在搜索一次后被篡改,因为引用的是同一个内存地址
  • el-input中输入的字符串中的小写字母转为大写字母:event = event.toUpperCase();
  • 使用includes方法判断导航栏的名字中是否有el-input中的数据,如果有则将这一项整个pushnewMenuList中,最后判断newMenuListlength是否大于0,如果大于0则将newMenuList赋值给导航栏组件需要的数据中,如果newMenuListlength不大于0则进行提示:未匹配到该菜单
  • el-input执行clearable操作或者el-input中输入为空时,将父组件传过来的导航栏数据赋值到导航栏组件所需要的数据中

实现

  • 这里使用到el-inputclearable@clear@keydown.enter.native
  • 注意:因为是el-input标签的本质其实是elementUI的一个组件,所以监听回车键需要添加事件修饰符.native,它允许我们在自定义的组件标签中添加原生的DOM事件
    • 其他的elementUI组件也是可以用这个方法来绑定原生DOM事件
    • el-button之所以可以直接使用@click是因为elementUI在创建组件时就为<el-button>里面的<button>标签绑定了一个click事件,相当于是官方提前为我们准备好了一个click接口,我们看似是在调用原生jsclick事件,实际上是在调用elementUI官方为我们提前准备好的方法。

image.png

主要代码如下:

<el-input placeholder="输入关键字进行过滤" v-model="filterText" class="side-menu__filter" size="small" clearable suffix-icon="el-icon-search" @clear="handleSearch(filterText)" @keydown.enter.native="handleSearch(filterText)"></el-input>
handleSearch(event) {
      // 将将输入的字符串中的小写字母转为大写字母
      event = event.toUpperCase();
      let newMenuList = [];
      // 将父组件传过来的导航栏数据进行深拷贝一层
      const copySideMenuList = JSON.parse(JSON.stringify(this.sideMenuList));
      copySideMenuList.forEach((firstItem) => {
        // 循环判断导航栏数据是否匹配到搜索的字符
        if (firstItem.label.includes(event)) {
          newMenuList.push(firstItem);
        }
        if (!firstItem.label.includes(event) && firstItem.children) {
          for (let secondItem of firstItem.children) {
            if (secondItem.label.includes(event)) {
              newMenuList.push(secondItem);
            }
          }
        }
      });
      if (newMenuList.length > 0) {
        this.menuList = newMenuList;
      } else {
        this.$message.warning('未匹配到该菜单');
      }
      // 搜索字符串为空时返回原数据
      if (event == '') {
        this.menuList = this.sideMenuList;
      }
    }

到此这篇关于VUE侧边导航栏实现筛选过滤的示例代码的文章就介绍到这了,更多相关VUE侧边导航栏筛选过滤内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在vue项目中引入highcharts图表的方法(详解)

    在vue项目中引入highcharts图表的方法(详解)

    下面小编就为大家分享一篇在vue项目中引入highcharts图表的方法(详解),具有很好的参考价值,希望对大家有所帮助
    2018-03-03
  • Vue封装--如何将数字转换成万

    Vue封装--如何将数字转换成万

    这篇文章主要介绍了Vue封装--将数字转换成万的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MAC+PyCharm+Flask+Vue.js搭建系统

    MAC+PyCharm+Flask+Vue.js搭建系统

    最近新做了个项目,使用的是MAC+PyCharm+Flask+Vue.js搭建系统,本文就来分享一下搭建步骤,感兴趣的可以了解一下
    2021-05-05
  • vue3中引入svg矢量图的实现示例

    vue3中引入svg矢量图的实现示例

    在项目开发过程中,我们经常会用到svg矢量图,本文主要介绍了vue3中引入svg矢量图的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • vue项目打包部署_nginx代理访问方法详解

    vue项目打包部署_nginx代理访问方法详解

    今天小编就为大家分享一篇vue项目打包部署_nginx代理访问方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue中v-for指令完成列表渲染

    vue中v-for指令完成列表渲染

    这篇文章主要给大家分享的是vue中v-for指令完成列表渲染,下面文化章就围绕中v-for的相关资料在Vue中列表渲染做个简单总结和使用演示,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • vue项目中播放rtmp视频文件流的方法

    vue项目中播放rtmp视频文件流的方法

    这篇文章主要介绍了vue项目中播放rtmp视频文件流 ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • vue组件name的作用小结

    vue组件name的作用小结

    大家在写vue项目的时候会遇到给组件的各种命名,接下来通过本文给大家分享vue组件name的作用小结,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-05-05
  • vue计算属性想要传入参数如何解决

    vue计算属性想要传入参数如何解决

    这篇文章主要介绍了vue计算属性想要传入参数如何解决问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vue修改对象的属性值后页面不重新渲染的实例

    vue修改对象的属性值后页面不重新渲染的实例

    今天小编就为大家分享一篇vue修改对象的属性值后页面不重新渲染的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08

最新评论