vue和js中实现模糊查询方式

 更新时间:2022年08月02日 14:56:35   作者:风如也  
这篇文章主要介绍了vue和js中实现模糊查询方式,具有很好的参考价值,希望对大家有所帮助。也希望大家多多支持脚本之家

vue和js实现模糊查询

先来看效果图

在这里插入图片描述

这种数据量少的场景适用于前端实现模糊查询

如何实现?

<template>
  <div class="container">
    <div class="search-bar">
      <el-input v-model="inputVal" placeholder="请输入图标名称" suffix-icon="el-icon-search" clearable></el-input>
    </div>
    <div class="icon-contain">
      <div class="icon-item" v-for="item in searchList" :key="item.icon">
        <i class="icon-style" :class="item.icon"></i>
        <span class="icon-name">{{ item.name }}</span>
      </div>
    </div>
  </div>
</template>

js部分

<script>
export default {
  data () {
    return {
      inputVal: '',
      list: [], // 全部图标列表
    }
  },
  created() {
    this.loadData()
  },
  computed: {
    searchList () {
      ....
    }
  },
  methods: {
    loadData() { // 初始化数据
      this.list = [
        { icon: 'el-icon-delete', name: 'el-icon-delete' },
        { icon: 'el-icon-setting', name: 'el-icon-setting' },
        { icon: 'el-icon-user', name: 'el-icon-user' },
        { icon: 'el-icon-star-off', name: 'el-icon-star-off' },
        { icon: 'el-icon-picture-outline', name: 'el-icon-picture-outline' },
        { icon: 'el-icon-s-custom', name: 'el-icon-s-custom' },
        { icon: 'el-icon-edit', name: 'el-icon-edit' },
        { icon: 'el-icon-folder-opened', name: 'el-icon-folder-opened' },
        { icon: 'el-icon-chat-dot-round', name: 'el-icon-chat-dot-round' },
        { icon: 'el-icon-upload', name: 'el-icon-upload' },
        { icon: 'el-icon-message-solid', name: 'el-icon-message-solid' }
      ]
    },
  }
}
</script>

我们用 computed 计算属性来动态获得图标列表数据

想要达到的功能是:输入框输入内容,列表框能动态根据输入值显示输入值相关的列表,即模糊查询

方法1

使用 filter() 和 includes() 实现

  computed: {
    searchList () {
      if (!this.inputVal) {
        return this.list
      }
      return this.list.filter(item => {
      	return item.name.includes(this.inputVal)
      })
      return data
    }
  },

方法2

使用 indexOf() 实现,(涉及到英文字母的还是建议处理一下大小写问题)

  computed: {
    searchList () {
      if (!this.inputVal) {
        return this.list
      }
      const data = []
      this.list.forEach(item => {
        if (item.name.toLowerCase().indexOf(this.inputVal.toLowerCase()) !== -1) {
          data.push(item)
        }
      })
      return data
    }
  },

方法3

使用 test() 正则匹配实现

语法:RegExp.test(string) ,string 要检测的字符串

该方法用于检测一个字符串是否匹配某个模式,如果匹配返回 true ,否则返回 false

  computed: {
    searchList () {
      if (!this.inputVal) {
        return this.list
      }
      const data = []
      const reg = new RegExp(this.inputVal.toLowerCase())
      this.list.forEach(item => {
        if (reg.test(item.name.toLowerCase())) {
          data.push(item)
        }
      })
      return data
    }
  },

还有其他的方法,如 split()、match() 等

正则表达式实现模糊查询

拿到一个新需求 就是在前端进行查询一个数据

虽然一般这种行为都是在后端进行但是有时候就是会给你这个需求,这里因为数据量较小所以就进行简单的遍历查询 没有对数据进行排序后查询 其实有想过二分查找之类的 但是这里数据量较小 就遍历吧

    search() {
      console.log(this.searchInformation)
      this.listData = []
      var str = ".*" + this.searchInformation + ".*"
      let reg = new RegExp(str)
      //这里通过邀请码查询
      for(var i=0;i<this.wholeListData.length;i++){
        if(reg.test(this.wholeListData[i].content)){
          this.listData.push(this.wholeListData[i])
        }
      }
      //通过附加信息查询
      for(var i=0;i<this.wholeListData.length;i++){
        if(reg.test(this.wholeListData[i].addition)){
          this.listData.push(this.wholeListData[i])
        }
      }
    },

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Vue中使用和移除总线Bus的注意事项详解

    Vue中使用和移除总线Bus的注意事项详解

    Vue中的总线Bus是一种通信机制,可用于组件间的数据传递和事件触发。使用时需要注意Bus的命名和定义、监听和触发事件的方法、移除和销毁Bus的时机和方式等问题。合理使用总线Bus可以提高组件的复用性和可维护性,但过度依赖可能会导致代码耦合和难以维护
    2023-04-04
  • vue普通加密及国密SM2、SM3和sm4的使用例子

    vue普通加密及国密SM2、SM3和sm4的使用例子

    在我的项目中,甲方要求系统登录时对密码进行加密后再传给后端,指定使用国密SM3,下面这篇文章主要给大家介绍了关于vue普通加密及国密SM2、SM3和sm4使用的相关资料,需要的朋友可以参考下
    2022-12-12
  • VUE 文字转语音播放的实现示例

    VUE 文字转语音播放的实现示例

    本文主要介绍了VUE 文字转语音播放的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • vue 获取到数据但却渲染不到页面上的解决方法

    vue 获取到数据但却渲染不到页面上的解决方法

    这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • vue报错Not allowed to load local resource的解决办法

    vue报错Not allowed to load local resource的解决办法

    这篇文章主要给大家介绍了关于vue报错Not allowed to load local resource的解决办法,这个错误是因为Vue不能加载本地资源的原因,需要的朋友可以参考下
    2023-07-07
  • vue-cli5.0 webpack 采用 copy-webpack-plugin 打包复制文件的方法

    vue-cli5.0 webpack 采用 copy-webpack-plugin 打包复制文件的方法

    今天就好好说说vue-cli5.0种使用copy-webpack-plugin插件该如何配置的问题。这里我们安装的 copy-webpack-plugin 的版本是 ^11.0.0,感兴趣的朋友一起看看吧
    2022-06-06
  • vue实现带放大镜的搜索框

    vue实现带放大镜的搜索框

    这篇文章主要为大家详细介绍了vue实现带放大镜的搜索框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 关于vue3编写挂载DOM的插件问题

    关于vue3编写挂载DOM的插件问题

    这篇文章主要介绍了vue3编写挂载DOM的插件的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • elementUI中MENU菜单踩坑

    elementUI中MENU菜单踩坑

    本文主要介绍了elementUI中MENU菜单踩坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • element表单校验提示定位到元素位置

    element表单校验提示定位到元素位置

    本文主要介绍了element表单校验提示定位到元素位置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论