当前位置:首页 > VUE

vue实现模糊搜索功能

2026-01-22 02:46:15VUE

实现模糊搜索的基本思路

在Vue中实现模糊搜索功能通常需要结合输入框的事件监听、数据过滤以及实时展示。核心是利用JavaScript的字符串方法或正则表达式对数据进行匹配筛选。

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

通过计算属性对数据进行过滤是最常见的方式,适合中小型数据量的场景。定义一个搜索关键词,利用filterincludes方法筛选数据。

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: '',
      list: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.list.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用第三方库优化搜索

对于更复杂的模糊搜索需求(如拼音搜索、权重匹配),可以引入第三方库如fuse.js。它提供更强大的模糊搜索算法。

import Fuse from 'fuse.js'

export default {
  data() {
    return {
      searchQuery: '',
      list: [/* 数据 */],
      fuse: null
    }
  },
  mounted() {
    this.fuse = new Fuse(this.list, {
      keys: ['name'],
      threshold: 0.4
    })
  },
  computed: {
    filteredList() {
      return this.searchQuery 
        ? this.fuse.search(this.searchQuery).map(r => r.item)
        : this.list
    }
  }
}

防抖优化性能

频繁触发搜索会导致性能问题,可以通过防抖(debounce)控制触发频率。

vue实现模糊搜索功能

import _ from 'lodash'

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

高亮匹配结果

使用自定义指令或过滤器实现搜索关键词高亮显示,提升用户体验。

<template>
  <span v-html="highlight(item.name, searchQuery)"></span>
</template>

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

<style>
.highlight {
  background-color: yellow;
}
</style>

多字段联合搜索

当需要同时搜索多个字段时,扩展过滤逻辑即可。

computed: {
  filteredList() {
    return this.list.filter(item => 
      ['name', 'description', 'category'].some(key =>
        String(item[key]).toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    )
  }
}

分享给朋友:

相关文章

vue搜索功能实现

vue搜索功能实现

Vue 搜索功能实现 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 绑定输入框的值到 Vue 实例的数据属性,监听用户输入变化: <temp…

vue 模糊查询实现

vue 模糊查询实现

实现 Vue 模糊查询的方法 使用计算属性实现模糊查询 在 Vue 中,可以通过计算属性结合 JavaScript 的 filter 和 includes 方法实现模糊查询。以下是一个示例代码:…

实现模糊查询vue

实现模糊查询vue

实现模糊查询的方法 在Vue中实现模糊查询通常需要结合输入框和列表渲染,通过监听输入框的变化实时过滤数据。以下是几种常见的实现方式: 使用计算属性过滤数据 <template> &l…

react-如何实现接口搜索功能

react-如何实现接口搜索功能

实现接口搜索功能的步骤 在React中实现接口搜索功能通常涉及以下几个关键部分:状态管理、API调用、用户输入处理和结果展示。 状态管理 使用useState来管理搜索输入和搜索结果的状态。需要定义…

react如何写多条件搜索功能

react如何写多条件搜索功能

实现多条件搜索功能 在React中实现多条件搜索功能,通常需要结合状态管理和筛选逻辑。以下是几种常见实现方式: 使用useState管理搜索条件 通过useState管理多个搜索条件,并在渲染时进行…

css边缘模糊制作

css边缘模糊制作

使用 box-shadow 实现边缘模糊 通过 box-shadow 属性可以快速为元素添加边缘模糊效果。调整模糊半径(blur)参数控制模糊程度,spread 参数控制阴影扩散范围。…