当前位置:首页 > VUE

vue实现模糊查找

2026-03-28 17:24:37VUE

实现模糊查找的基本思路

模糊查找通常指根据用户输入的关键词,匹配并筛选出包含相似内容的数据。在Vue中可以通过计算属性、自定义方法或第三方库实现。

使用计算属性实现

定义数据列表和搜索关键词的响应式变量,利用计算属性过滤匹配项。

vue实现模糊查找

<template>
  <input v-model="searchQuery" placeholder="输入关键词">
  <ul>
    <li v-for="item in filteredList" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用自定义方法优化匹配

对于复杂匹配逻辑,可以封装独立方法处理模糊匹配,支持正则表达式或更灵活的规则。

vue实现模糊查找

methods: {
  fuzzyMatch(text, query) {
    const pattern = query.split('').map(char => 
      `(?=.*${char})`).join('')
    const regex = new RegExp(pattern, 'i')
    return regex.test(text)
  }
}

集成第三方库Fuse.js

Fuse.js提供更强大的模糊搜索能力,支持权重、阈值等高级配置。

import Fuse from 'fuse.js'

computed: {
  fuse() {
    return new Fuse(this.items, {
      keys: ['name'],
      threshold: 0.4
    })
  },
  fuzzyResults() {
    return this.searchQuery 
      ? this.fuse.search(this.searchQuery).map(r => r.item)
      : this.items
  }
}

性能优化建议

对于大型数据集,考虑以下优化措施:

  • 添加防抖处理输入事件
  • 使用Web Worker进行后台计算
  • 对静态数据预构建搜索索引

完整示例代码

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @input="handleSearch" 
      placeholder="模糊搜索">
    <ul>
      <li v-for="result in searchResults" :key="result.id">
        {{ result.name }}
      </li>
    </ul>
  </div>
</template>

<script>
import _debounce from 'lodash/debounce'
import Fuse from 'fuse.js'

export default {
  data() {
    return {
      searchQuery: '',
      searchResults: [],
      fuse: null,
      items: [...] // 原始数据
    }
  },
  mounted() {
    this.fuse = new Fuse(this.items, {
      keys: ['name', 'description'],
      includeScore: true,
      minMatchCharLength: 2
    })
  },
  methods: {
    handleSearch: _debounce(function() {
      this.searchResults = this.searchQuery
        ? this.fuse.search(this.searchQuery).map(r => r.item)
        : this.items
    }, 300)
  }
}
</script>

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

相关文章

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 指令 通过 v-html 指令可以动态插入 HTML 内容,将需要高…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可以…

vue实现城市

vue实现城市

Vue 实现城市选择功能 使用 Element UI 的 Cascader 组件 Element UI 提供了一个 Cascader 级联选择器组件,非常适合实现城市选择功能。需要先安装 Elemen…

vue实现桌面widget

vue实现桌面widget

Vue 实现桌面 Widget 的方法 使用 Vue 实现桌面 Widget 通常需要结合 Electron 或 NW.js 等桌面应用框架,以及系统级 API 调用。以下是具体实现方法: 使用 E…