当前位置:首页 > VUE

vue模糊查询实现

2026-02-19 03:51:46VUE

实现 Vue 模糊查询的方法

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

在 Vue 中,可以利用计算属性和 JavaScript 的 filter 方法实现模糊查询。首先需要准备数据源和搜索关键词。

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

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

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

使用 Lodash 的防抖优化性能

对于大数据量或频繁输入的搜索,可以使用 Lodash 的 debounce 方法优化性能。

vue模糊查询实现

import { debounce } from 'lodash'

methods: {
  search: debounce(function() {
    // 搜索逻辑
  }, 500)
}

实现多字段模糊查询

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

computed: {
  filteredItems() {
    if (!this.searchText) return this.items
    const search = this.searchText.toLowerCase()
    return this.items.filter(item => 
      item.name.toLowerCase().includes(search) ||
      item.description.toLowerCase().includes(search)
    )
  }
}

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

对于更复杂的搜索需求,可以考虑使用专门的搜索库如 Fuse.js:

vue模糊查询实现

import Fuse from 'fuse.js'

data() {
  return {
    fuse: null,
    // 其他数据
  }
},
created() {
  this.fuse = new Fuse(this.items, {
    keys: ['name', 'description'],
    threshold: 0.4
  })
},
computed: {
  filteredItems() {
    if (!this.searchText) return this.items
    return this.fuse.search(this.searchText).map(result => result.item)
  }
}

服务器端模糊查询

对于大量数据,建议将搜索逻辑放在服务器端:

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

在输入框上添加事件监听:

<input 
  v-model="searchText" 
  @input="searchItems" 
  placeholder="Search...">

以上方法可以根据实际需求选择或组合使用,实现 Vue 中的模糊查询功能。

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

相关文章

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const rout…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(…

vue实现div

vue实现div

Vue 实现 DIV 元素的方法 在 Vue 中实现 DIV 元素可以通过多种方式,以下是几种常见的实现方法: 使用模板语法 在 Vue 的模板中直接使用 HTML 的 <div> 标…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:…