当前位置:首页 > VUE

使用vue实现模糊查询

2026-01-20 20:17:16VUE

实现模糊查询的基本思路

在Vue中实现模糊查询通常需要结合输入框的监听、数据处理和过滤逻辑。核心步骤包括监听用户输入、处理输入内容、过滤数据列表以及渲染结果。

监听用户输入

使用v-model双向绑定输入框的值,配合@inputwatch监听输入变化:

<template>
  <input v-model="searchText" placeholder="输入关键词搜索" />
</template>

<script>
export default {
  data() {
    return {
      searchText: "",
      rawData: ["苹果", "香蕉", "橙子", "西瓜"], // 原始数据
      filteredData: [] // 过滤后的结果
    };
  },
  watch: {
    searchText(newVal) {
      this.filterData(newVal);
    }
  }
};
</script>

实现过滤逻辑

使用JavaScript的字符串方法或正则表达式进行模糊匹配。常见方法包括includes()indexOf()或正则表达式的test()

methods: {
  filterData(keyword) {
    if (!keyword) {
      this.filteredData = [...this.rawData];
      return;
    }
    this.filteredData = this.rawData.filter(item => 
      item.toLowerCase().includes(keyword.toLowerCase())
    );
  }
}

渲染过滤结果

通过v-for展示过滤后的数据列表:

<template>
  <ul>
    <li v-for="(item, index) in filteredData" :key="index">
      {{ item }}
    </li>
  </ul>
</template>

使用计算属性优化性能

对于小型数据集,可以用计算属性替代watch,避免手动触发过滤:

computed: {
  filteredData() {
    const keyword = this.searchText.toLowerCase();
    return this.rawData.filter(item => 
      item.toLowerCase().includes(keyword)
    );
  }
}

高级模糊搜索(正则表达式)

如果需要更灵活的匹配(如忽略大小写、部分匹配),可使用正则表达式:

methods: {
  filterData(keyword) {
    const regex = new RegExp(keyword, 'i'); // 'i'表示忽略大小写
    this.filteredData = this.rawData.filter(item => regex.test(item));
  }
}

结合第三方库(如Fuse.js)

对于复杂场景(如权重匹配、错别字容错),可使用模糊搜索库:

  1. 安装Fuse.js:

    npm install fuse.js
  2. 在Vue中使用:

    
    import Fuse from 'fuse.js';

export default { data() { return { fuse: null, options: { // 配置搜索选项 keys: ['name'], // 搜索的字段 threshold: 0.4 // 匹配阈值 } }; }, created() { this.fuse = new Fuse(this.rawData, this.options); }, methods: { filterData(keyword) { this.filteredData = keyword ? this.fuse.search(keyword).map(r => r.item) : [...this.rawData]; } } };


### 处理异步数据

如果数据来自API请求,需在获取数据后初始化搜索逻辑:

```javascript
async created() {
  const res = await axios.get('/api/data');
  this.rawData = res.data;
  this.filteredData = [...this.rawData];
}

防抖优化性能

频繁输入时通过防抖减少计算次数:

import { debounce } from 'lodash';

methods: {
  filterData: debounce(function(keyword) {
    // 过滤逻辑
  }, 300)
}

样式与交互增强

添加加载状态和空结果提示:

使用vue实现模糊查询

<template>
  <div v-if="loading">搜索中...</div>
  <div v-else-if="filteredData.length === 0">无匹配结果</div>
</template>

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

相关文章

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登录…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…