当前位置:首页 > VUE

vue实现搜索筛选

2026-03-09 10:53:04VUE

实现搜索筛选的基本思路

在Vue中实现搜索筛选功能通常涉及以下几个核心步骤:监听用户输入、过滤数据列表、实时更新视图。以下是具体实现方法。

使用计算属性过滤数据

计算属性是Vue中实现数据筛选的高效方式,能自动缓存结果并响应依赖变化。

vue实现搜索筛选

<template>
  <input v-model="searchQuery" placeholder="搜索...">
  <ul>
    <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Cherry' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用watch实现异步搜索

当需要从API异步获取搜索结果时,watch配合防抖函数更合适。

<script>
import _ from 'lodash';

export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      allItems: []
    }
  },
  created() {
    this.fetchItems();
  },
  watch: {
    searchQuery: _.debounce(function(newVal) {
      this.filterItems(newVal);
    }, 300)
  },
  methods: {
    fetchItems() {
      // 模拟API请求
      this.allItems = [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Cherry' }
      ];
      this.items = [...this.allItems];
    },
    filterItems(query) {
      this.items = this.allItems.filter(item =>
        item.name.toLowerCase().includes(query.toLowerCase())
      );
    }
  }
}
</script>

多条件筛选实现

对于需要多个筛选条件的场景,可以扩展计算属性逻辑。

vue实现搜索筛选

<script>
export default {
  data() {
    return {
      nameQuery: '',
      categoryQuery: '',
      items: [
        { id: 1, name: 'Apple', category: 'fruit' },
        { id: 2, name: 'Carrot', category: 'vegetable' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        const nameMatch = item.name.toLowerCase().includes(
          this.nameQuery.toLowerCase()
        );
        const categoryMatch = item.category.includes(
          this.categoryQuery
        );
        return nameMatch && categoryMatch;
      });
    }
  }
}
</script>

使用第三方库增强搜索

对于复杂搜索需求,可以考虑使用Fuse.js等模糊搜索库。

import Fuse from 'fuse.js';

// 在组件中
methods: {
  initFuse() {
    const options = {
      keys: ['name', 'category'],
      threshold: 0.4
    };
    this.fuse = new Fuse(this.allItems, options);
  },
  searchWithFuse(query) {
    this.items = query ? this.fuse.search(query).map(r => r.item) : [...this.allItems];
  }
}

性能优化技巧

对于大型数据集,考虑以下优化手段:

  • 使用虚拟滚动(vue-virtual-scroller)避免渲染大量DOM
  • Web Worker处理密集型计算
  • 分页加载搜索结果
  • 防抖/节流控制搜索频率
// 分页示例
computed: {
  paginatedItems() {
    const start = (this.currentPage - 1) * this.pageSize;
    return this.filteredItems.slice(start, start + this.pageSize);
  }
}

以上方法可以根据具体需求组合使用,构建出灵活高效的搜索筛选功能。

标签: vue
分享给朋友:

相关文章

vue实现文档分享

vue实现文档分享

Vue 实现文档分享功能 文档分享功能通常涉及文件上传、存储、生成分享链接以及权限控制等模块。以下是基于 Vue 的实现方案: 文件上传组件 使用 element-ui 或 ant-design-v…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转效…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axios…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…