vue实现分类筛选
Vue实现分类筛选的方法
数据准备与结构设计
在Vue组件中定义分类数据和筛选条件,通常使用data或computed属性。例如商品分类可能包含:
data() {
return {
products: [
{ id: 1, name: '商品A', category: '电子' },
{ id: 2, name: '商品B', category: '服饰' }
],
selectedCategory: ''
}
}
动态筛选逻辑实现
通过计算属性实现实时筛选,避免直接操作原始数据:
computed: {
filteredProducts() {
return this.selectedCategory
? this.products.filter(item => item.category === this.selectedCategory)
: this.products
}
}
模板渲染与交互
在模板中使用v-for渲染筛选结果,v-model绑定筛选条件:
<select v-model="selectedCategory">
<option value="">全部</option>
<option v-for="cat in uniqueCategories" :value="cat">{{ cat }}</option>
</select>
<ul>
<li v-for="product in filteredProducts">{{ product.name }}</li>
</ul>
多条件筛选扩展
对于复杂筛选可增加更多条件判断:
computed: {
filteredItems() {
return this.items.filter(item => {
const matchCategory = !this.filters.category || item.category === this.filters.category
const matchPrice = item.price >= this.filters.minPrice
return matchCategory && matchPrice
})
}
}
性能优化建议
对于大型数据集:
- 使用虚拟滚动(如vue-virtual-scroller)
- 添加防抖处理频繁筛选操作
- 考虑Web Worker处理复杂计算
状态管理方案
当涉及跨组件筛选时,可采用Vuex或Pinia:
// store.js
state: {
filters: {
category: '',
priceRange: [0, 100]
}
}
路由集成
通过路由参数保持筛选状态:

watch: {
'$route.query'(newQuery) {
this.selectedCategory = newQuery.category || ''
}
}






