当前位置:首页 > 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,避免手动触发过滤:

使用vue实现模糊查询

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:

    使用vue实现模糊查询

    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)
}

样式与交互增强

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

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

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

相关文章

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDi…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <template…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在Vu…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现分屏

vue实现分屏

Vue 实现分屏的方法 分屏功能通常用于展示多个独立内容区域,以下是几种常见的实现方式: 使用 CSS Grid 布局 通过 CSS Grid 可以轻松创建分屏布局,在 Vue 组件中直接应用样式:…