当前位置:首页 > 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中实现搜索功能可以通过多种方式完成,以下是几种常见的方法: 使用计算属性实现搜索 计算属性非常适合处理需要根据输入值动态过滤数据的情况。创建一个计算属性,根据搜索关…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

vue实现模糊查询

vue实现模糊查询

Vue 实现模糊查询的方法 在 Vue 中实现模糊查询可以通过多种方式完成,以下是几种常见的方法: 使用 JavaScript 的 filter 和 includes 方法 通过 Vue 的 co…

vue模糊查询怎么实现

vue模糊查询怎么实现

Vue模糊查询实现方法 在Vue中实现模糊查询通常结合输入框和列表过滤功能,以下是几种常见方法: 使用计算属性过滤列表 <template> <div> <…

vue实现列表模糊检索

vue实现列表模糊检索

实现思路 在Vue中实现列表模糊检索通常涉及以下几个关键点:利用计算属性动态过滤列表、绑定输入框的输入事件、使用正则表达式或字符串方法进行模糊匹配。 基础实现步骤 创建Vue实例或组件,定义数据列表…

vue前端实现模糊查询

vue前端实现模糊查询

实现模糊查询的基本思路 在Vue中实现模糊查询通常需要结合输入框的监听事件和数据过滤功能。核心逻辑是通过用户输入的关键词,对目标数据进行筛选匹配。 使用计算属性实现 计算属性适合处理需要响应式更新…