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

样式与交互增强

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

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

使用vue实现模糊查询

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

相关文章

vue实现前端分离

vue实现前端分离

Vue 实现前后端分离 前后端分离是一种架构模式,前端负责页面渲染和交互逻辑,后端提供数据接口。Vue.js 作为前端框架,非常适合实现前后端分离的开发模式。 核心实现步骤 创建 Vue 项目 使用…

vue实现多级表头

vue实现多级表头

Vue 实现多级表头的方法 使用 el-table 组件 Element UI 的 el-table 组件支持多级表头的实现,通过嵌套 el-table-column 即可完成。 <el-t…

vue实现点击页面切换

vue实现点击页面切换

实现点击页面切换功能 在Vue中实现点击页面切换功能,可以通过路由跳转或组件动态渲染两种方式完成。以下是具体实现方法: 使用Vue Router实现页面跳转 安装Vue Router后,在项目中…

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templ…

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> &l…