当前位置:首页 > VUE

vue 模糊查询实现

2026-02-18 04:18:05VUE

Vue 模糊查询实现方法

使用计算属性实现模糊查询

在 Vue 中可以通过计算属性结合 JavaScript 的 filterincludes 方法实现模糊查询。定义一个计算属性,根据输入的关键词过滤数据列表。

data() {
  return {
    searchQuery: '',
    items: [
      { id: 1, name: 'Apple' },
      { id: 2, name: 'Banana' },
      { id: 3, name: 'Orange' }
    ]
  }
},
computed: {
  filteredItems() {
    return this.items.filter(item => 
      item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
    )
  }
}

模板部分绑定输入框和显示过滤结果:

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

使用 Lodash 的防抖优化性能

对于大数据量或频繁输入的情况,可以使用 Lodash 的 debounce 函数优化性能,避免频繁触发过滤计算。

import { debounce } from 'lodash'

methods: {
  debouncedSearch: debounce(function(query) {
    this.searchQuery = query
  }, 300)
}

模板中监听输入事件:

<input @input="e => debouncedSearch(e.target.value)" placeholder="Search...">

实现多字段模糊查询

如果需要同时匹配多个字段,可以扩展过滤逻辑:

computed: {
  filteredItems() {
    return this.items.filter(item => 
      ['name', 'description'].some(field => 
        item[field].toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    )
  }
}

使用第三方库实现高级搜索

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

import Fuse from 'fuse.js'

data() {
  return {
    fuse: null,
    // ...其他数据
  }
},
mounted() {
  this.fuse = new Fuse(this.items, {
    keys: ['name', 'description'],
    threshold: 0.4
  })
},
computed: {
  filteredItems() {
    return this.searchQuery 
      ? this.fuse.search(this.searchQuery).map(r => r.item)
      : this.items
  }
}

服务器端模糊查询实现

当数据量很大时,建议将模糊查询逻辑放在服务器端:

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

使用 watch 监听搜索词变化:

watch: {
  searchQuery(newVal) {
    this.searchItems(newVal)
  }
}

vue 模糊查询实现

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

相关文章

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <tem…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue实现积分

vue实现积分

Vue 实现积分功能 在 Vue 中实现积分功能通常涉及前端展示、交互逻辑以及与后端 API 的通信。以下是常见的实现方法和步骤: 积分展示组件 创建一个积分展示组件,用于显示当前用户的积分。可以使…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有…