当前位置:首页 > VUE

vue实现模糊查询功能

2026-01-20 14:14:44VUE

Vue 实现模糊查询功能

数据准备

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

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

计算属性实现

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

vue实现模糊查询功能

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>

优化性能

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

vue实现模糊查询功能

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>

分享给朋友:

相关文章

php实现网站查询功能实现

php实现网站查询功能实现

数据库连接与配置 使用PDO或MySQLi建立数据库连接,确保配置信息(如主机名、用户名、密码、数据库名)正确。PDO示例: $dsn = 'mysql:host=localhost;dbnam…

vue实现模糊查询

vue实现模糊查询

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

vue实现列表模糊检索

vue实现列表模糊检索

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

vue 实现查询功能

vue 实现查询功能

Vue 实现查询功能的方法 在Vue中实现查询功能通常需要结合数据绑定、事件处理和过滤逻辑。以下是几种常见的实现方式: 基础数据过滤 使用v-model绑定输入框,配合计算属性实现实时过滤:…

tree模糊搜索实现vue

tree模糊搜索实现vue

实现 Vue 中的 Tree 模糊搜索 在 Vue 中实现 Tree 组件的模糊搜索功能,通常需要结合递归组件、过滤算法和动态渲染。以下是具体实现方法: 递归组件结构 定义一个递归的 Tree 组件…

vue实现点击查询功能

vue实现点击查询功能

实现点击查询功能的基本步骤 在Vue中实现点击查询功能通常涉及以下几个关键部分:数据绑定、事件监听、API调用和结果展示。 模板部分 在Vue模板中添加一个输入框和查询按钮,使用v-model绑定查…