当前位置:首页 > VUE

vue实现模糊查询功能

2026-01-20 14:14:44VUE

Vue 实现模糊查询功能

数据准备

确保有一个数组作为数据源,例如:

data() {
  return {
    items: ['Apple', 'Banana', 'Orange', 'Grape'],
    searchQuery: '',
    filteredItems: []
  }
}

计算属性实现

使用计算属性根据输入的关键词实时过滤数据:

computed: {
  filteredItems() {
    return this.items.filter(item => 
      item.toLowerCase().includes(this.searchQuery.toLowerCase())
    )
  }
}

模板部分

在模板中添加输入框和结果列表:

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

优化性能

对于大数据量,可以添加防抖:

methods: {
  debounceSearch: _.debounce(function() {
    this.filteredItems = this.items.filter(item =>
      item.toLowerCase().includes(this.searchQuery.toLowerCase())
    )
  }, 300)
}

使用第三方库

考虑使用 Fuse.js 实现更强大的模糊搜索:

import Fuse from 'fuse.js'

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

样式增强

为搜索结果添加高亮效果:

vue实现模糊查询功能

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

完整示例

<template>
  <div>
    <input v-model="searchQuery" @input="debounceSearch">
    <ul>
      <li v-for="item in filteredItems" :key="item" v-html="highlight(item)">
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Apple', 'Banana', 'Orange', 'Grape'],
      searchQuery: '',
      filteredItems: []
    }
  },
  methods: {
    debounceSearch: _.debounce(function() {
      this.filteredItems = this.items.filter(item =>
        item.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }, 300),
    highlight(text) {
      if (!this.searchQuery) return text
      const regex = new RegExp(this.searchQuery, 'gi')
      return text.replace(regex, match => `<span class="highlight">${match}</span>`)
    }
  }
}
</script>

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

分享给朋友:

相关文章

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能,可以通过多种方式完成。以下是几种常见的方法: 使用JavaScript的filter和includes方法 <template>…

vue实现列表模糊检索

vue实现列表模糊检索

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

vue实现模糊搜索原理

vue实现模糊搜索原理

实现模糊搜索的基本原理 模糊搜索的核心是通过输入的关键词在数据集中匹配相似内容,而非完全一致。Vue作为前端框架,主要通过数据绑定和计算属性实现动态过滤。 基于计算属性的实现方式 准备数据源 定义…

vue实现模糊搜索功能

vue实现模糊搜索功能

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

大量数据如何模糊匹配react

大量数据如何模糊匹配react

模糊匹配的实现方法 在React中处理大量数据的模糊匹配,通常需要结合高效的算法和优化策略。以下是几种常见的方法: 使用第三方库如Fuse.js Fuse.js是一个轻量级的模糊搜索库,支持模糊匹配…

react如何做出模糊搜索

react如何做出模糊搜索

实现模糊搜索的方法 在React中实现模糊搜索可以通过多种方式完成,常见的方法是结合输入框的状态管理和第三方模糊搜索库。以下是几种常见的实现方式: 使用Fuse.js进行模糊搜索 Fuse.js是一…