当前位置:首页 > 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>

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

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

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 函数减少计算频率,提升性能。

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 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="mod…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现toggle

vue实现toggle

Vue 实现 Toggle 功能 在 Vue 中实现 toggle(切换)功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 和 v-on 通过 v-model 绑定数据,结合…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…