当前位置:首页 > 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
  }
}

样式增强

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

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实现模糊查询功能

分享给朋友:

相关文章

css如何制作页面模糊

css如何制作页面模糊

使用 backdrop-filter 属性 通过 backdrop-filter 属性可以直接为元素背后的区域添加模糊效果。该属性需要浏览器支持(如 Chrome、Edge、Safari)。示例代码:…

vue实现模糊查找

vue实现模糊查找

实现模糊查找的方法 在Vue中实现模糊查找通常涉及结合输入框的监听、数据过滤和展示逻辑。以下是几种常见的方法: 使用计算属性过滤数据 通过计算属性对原始数据进行过滤,匹配用户输入的关键词。这种方法…

vue 模糊查询实现

vue 模糊查询实现

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

vue模糊查询实现

vue模糊查询实现

实现Vue模糊查询的方法 使用计算属性实现模糊查询 在Vue中,可以利用计算属性结合数组的filter方法实现模糊查询功能。计算属性会根据依赖的数据自动更新结果。 <template>…

vue 实现模糊搜索

vue 实现模糊搜索

Vue 实现模糊搜索的方法 使用计算属性实现模糊搜索 在 Vue 中,可以通过计算属性结合 JavaScript 的 filter 和 includes 方法实现简单的模糊搜索功能。假设有一个数据列表…

vue实现模糊查询

vue实现模糊查询

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