当前位置:首页 > VUE

vue 实现筛选功能

2026-03-28 09:41:04VUE

实现筛选功能的基本思路

在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、动态渲染结果。以下是具体实现方法。

数据准备与绑定

定义一个数组存储原始数据,另一个数组存储筛选后的结果。使用v-model绑定筛选条件输入框。

data() {
  return {
    items: [
      { id: 1, name: 'Apple', category: 'Fruit' },
      { id: 2, name: 'Carrot', category: 'Vegetable' },
      { id: 3, name: 'Banana', category: 'Fruit' }
    ],
    filteredItems: [],
    searchQuery: '',
    selectedCategory: ''
  }
}

计算属性实现动态筛选

利用Vue的计算属性(computed)自动响应输入变化,避免手动触发筛选。

vue 实现筛选功能

computed: {
  filteredResults() {
    return this.items.filter(item => {
      const matchesSearch = item.name.toLowerCase().includes(
        this.searchQuery.toLowerCase()
      );
      const matchesCategory = this.selectedCategory === '' || 
        item.category === this.selectedCategory;
      return matchesSearch && matchesCategory;
    });
  }
}

模板中的双向绑定

在模板中使用v-model绑定输入框,通过v-for渲染筛选结果。

<input 
  type="text" 
  v-model="searchQuery" 
  placeholder="Search by name"
>

<select v-model="selectedCategory">
  <option value="">All Categories</option>
  <option value="Fruit">Fruit</option>
  <option value="Vegetable">Vegetable</option>
</select>

<ul>
  <li v-for="item in filteredResults" :key="item.id">
    {{ item.name }} ({{ item.category }})
  </li>
</ul>

方法触发筛选(替代方案)

如果需要手动触发筛选(如点击按钮后执行),可使用方法配合事件。

vue 实现筛选功能

methods: {
  applyFilters() {
    this.filteredItems = this.items.filter(item => {
      return item.name.toLowerCase().includes(
        this.searchQuery.toLowerCase()
      );
    });
  }
}

对应模板中添加按钮触发:

<button @click="applyFilters">Filter</button>

多条件筛选扩展

对于更复杂的多条件筛选,可通过扩展计算属性或方法实现。例如添加价格范围筛选:

computed: {
  filteredResults() {
    return this.items.filter(item => {
      const matchesPrice = item.price >= this.minPrice && 
        item.price <= this.maxPrice;
      return matchesPrice && /* 其他条件 */;
    });
  }
}

性能优化建议

对于大数据量场景:

  • 使用debounce减少输入时的频繁计算
  • 考虑分页或虚拟滚动(如vue-virtual-scroller
  • 复杂条件可结合Web Worker处理

完整示例代码

<template>
  <div>
    <input v-model="searchQuery" placeholder="Search...">
    <select v-model="selectedCategory">
      <option value="">All</option>
      <option v-for="cat in categories" :value="cat">{{ cat }}</option>
    </select>

    <ul>
      <li v-for="item in filteredResults" :key="item.id">
        {{ item.name }} - {{ item.category }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [/* 原始数据 */],
      searchQuery: '',
      selectedCategory: ''
    }
  },
  computed: {
    categories() {
      return [...new Set(this.items.map(item => item.category))];
    },
    filteredResults() {
      return this.items.filter(item => {
        return (
          item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) &&
          (this.selectedCategory === '' || item.category === this.selectedCategory)
        );
      });
    }
  }
}
</script>

以上方法覆盖了Vue中实现筛选功能的常见场景,可根据实际需求选择计算属性或方法触发的方式,并灵活扩展多条件筛选逻辑。

标签: 功能vue
分享给朋友:

相关文章

vue实现单据

vue实现单据

Vue 实现单据功能的方法 使用 Vue 实现单据功能通常涉及表单设计、数据绑定、验证和提交等环节。以下是具体实现方案: 表单设计与数据绑定 使用 Vue 的 v-model 指令实现表单数据的双向…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现投票

vue实现投票

Vue实现投票功能 数据准备 在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态: data() { return { options: [ { id: 1…

vue实现滚动监听

vue实现滚动监听

滚动监听的基本实现 在Vue中实现滚动监听可以通过原生JavaScript的window.addEventListener或结合Vue的生命周期钩子完成。以下是一个基础示例: export defa…

vue实现添加div

vue实现添加div

在 Vue 中动态添加 div 元素 使用 v-for 指令动态渲染 div 通过 v-for 可以基于数组数据动态生成多个 div 元素。在模板中绑定数组数据,Vue 会自动遍历数组并为每个元素创建…

vue实现轮播文字

vue实现轮播文字

Vue实现轮播文字的方法 使用Vue的transition组件 在Vue中可以通过transition组件结合CSS动画实现文字轮播效果。定义一个数组存储需要轮播的文字内容,通过定时器切换当前显示的索…