当前位置:首页 > VUE

vue 实现模糊搜索

2026-01-18 19:04:24VUE

Vue 实现模糊搜索的方法

使用计算属性实现模糊搜索

在 Vue 中,可以通过计算属性结合 JavaScript 的 filterincludes 方法实现简单的模糊搜索功能。假设有一个数据列表 items 和一个搜索关键词 searchTerm

data() {
  return {
    items: ['Apple', 'Banana', 'Orange', 'Grape'],
    searchTerm: ''
  }
},
computed: {
  filteredItems() {
    return this.items.filter(item => 
      item.toLowerCase().includes(this.searchTerm.toLowerCase())
    )
  }
}

在模板中使用 v-model 绑定搜索框,并展示过滤后的结果:

<input v-model="searchTerm" placeholder="Search...">
<ul>
  <li v-for="item in filteredItems" :key="item">{{ item }}</li>
</ul>

使用第三方库实现更强大的模糊搜索

对于更复杂的模糊搜索需求,可以使用 fuse.js 这样的专门库:

安装 fuse.js:

vue 实现模糊搜索

npm install fuse.js

在 Vue 组件中使用:

import Fuse from 'fuse.js'

data() {
  return {
    items: [
      { name: 'Apple', category: 'Fruit' },
      { name: 'Carrot', category: 'Vegetable' }
    ],
    searchTerm: '',
    fuse: null
  }
},
created() {
  this.fuse = new Fuse(this.items, {
    keys: ['name', 'category'],
    threshold: 0.4
  })
},
computed: {
  filteredItems() {
    return this.searchTerm 
      ? this.fuse.search(this.searchTerm).map(result => result.item)
      : this.items
  }
}

实现带高亮的模糊搜索

可以扩展模糊搜索功能,在结果中高亮匹配的部分:

methods: {
  highlight(text, query) {
    if (!query) return text
    const regex = new RegExp(`(${query})`, 'gi')
    return text.replace(regex, '<span class="highlight">$1</span>')
  }
}

在模板中使用 v-html 渲染高亮内容:

vue 实现模糊搜索

<li v-for="item in filteredItems" :key="item.name">
  <span v-html="highlight(item.name, searchTerm)"></span>
</li>

使用防抖优化搜索性能

对于大数据集,可以使用防抖技术减少频繁搜索带来的性能问题:

import { debounce } from 'lodash'

methods: {
  debouncedSearch: debounce(function() {
    // 执行搜索逻辑
  }, 300)
}

服务端模糊搜索实现

当数据量很大时,可以考虑将模糊搜索逻辑移至服务端:

methods: {
  async searchItems() {
    const response = await axios.get('/api/items', {
      params: { q: this.searchTerm }
    })
    this.filteredItems = response.data
  }
}

多字段权重搜索

使用 fuse.js 可以设置不同字段的搜索权重:

this.fuse = new Fuse(this.items, {
  keys: [
    { name: 'name', weight: 0.7 },
    { name: 'category', weight: 0.3 }
  ]
})

以上方法可以根据实际需求选择或组合使用,实现从简单到复杂的模糊搜索功能。

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

相关文章

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…

vue前端实现搜索

vue前端实现搜索

实现搜索功能的基本方法 在Vue中实现搜索功能通常涉及以下几个关键步骤,结合数据绑定、计算属性和方法调用来动态过滤和显示结果。 数据绑定与输入处理 使用v-model双向绑定搜索输入框的值,监听用…

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的…

vue实现走势图

vue实现走势图

Vue 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted 和…