当前位置:首页 > VUE

vue前端实现模糊查询

2026-02-20 21:11:51VUE

Vue 前端实现模糊查询的方法

使用 JavaScript 的 filterincludes 方法

在 Vue 中,可以通过计算属性或方法对数组进行过滤,结合 includes 方法实现模糊查询。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用正则表达式实现更灵活的匹配

如果需要更复杂的模糊匹配,可以使用正则表达式。

vue前端实现模糊查询

computed: {
  filteredItems() {
    const query = this.searchQuery.toLowerCase()
    const regex = new RegExp(query, 'i')
    return this.items.filter(item => regex.test(item.name))
  }
}

结合 Lodash 的 debounce 优化性能

频繁输入时,可以使用 Lodash 的 debounce 函数减少计算频率,提升性能。

vue前端实现模糊查询

import { debounce } from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      filteredItems: []
    }
  },
  watch: {
    searchQuery: debounce(function(newVal) {
      this.filteredItems = this.items.filter(item => 
        item.name.toLowerCase().includes(newVal.toLowerCase())
      )
    }, 300)
  }
}

使用第三方库 Fuse.js 实现高级模糊搜索

Fuse.js 是一个强大的模糊搜索库,支持更复杂的匹配逻辑。

import Fuse from 'fuse.js'

export default {
  data() {
    return {
      searchQuery: '',
      fuse: null,
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  created() {
    this.fuse = new Fuse(this.items, {
      keys: ['name'],
      threshold: 0.3
    })
  },
  computed: {
    filteredItems() {
      return this.searchQuery 
        ? this.fuse.search(this.searchQuery).map(result => result.item)
        : this.items
    }
  }
}

结合 Vuex 实现全局搜索

如果项目使用 Vuex,可以将搜索逻辑放在 store 中统一管理。

// store.js
const store = new Vuex.Store({
  state: {
    items: [
      { id: 1, name: 'Apple' },
      { id: 2, name: 'Banana' },
      { id: 3, name: 'Orange' }
    ],
    searchQuery: ''
  },
  getters: {
    filteredItems: state => {
      return state.items.filter(item => 
        item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
      )
    }
  }
})

以上方法可以根据项目需求选择使用,从简单到复杂逐步扩展功能。

标签: 模糊vue
分享给朋友:

相关文章

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPag…

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现CRUD

vue实现CRUD

Vue 实现 CRUD 操作 Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。 安装依…

vue实现gridlayout

vue实现gridlayout

Vue 实现 Grid Layout 使用 CSS Grid 布局 CSS Grid 是一种强大的布局系统,可以直接在 Vue 组件的样式中使用。通过定义网格容器和网格项,可以快速实现复杂的布局结构。…

vscode实现vue高亮

vscode实现vue高亮

安装Vue官方扩展 在VSCode扩展商店中搜索并安装Volar,这是Vue团队推荐的官方插件,提供完整的Vue 3语言支持、语法高亮、智能提示等功能。安装后无需额外配置即可生效。 启用Volar的…