vue 实现过滤
Vue 实现过滤的方法
在 Vue 中实现过滤功能可以通过多种方式完成,以下是一些常见的方法:
使用计算属性过滤数据
计算属性是 Vue 中实现数据过滤的推荐方式,它能够根据依赖的数据动态计算并返回过滤后的结果。
<template>
<div>
<input v-model="searchQuery" placeholder="Search...">
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
searchQuery: '',
items: [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
]
}
},
computed: {
filteredItems() {
return this.items.filter(item =>
item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
)
}
}
}
</script>
使用过滤器方法
Vue 2.x 支持自定义过滤器,可以在模板中使用管道符 | 进行过滤操作。虽然 Vue 3 不再内置过滤器功能,但可以通过方法实现类似效果。
<template>
<div>
<input v-model="searchQuery" placeholder="Search...">
<ul>
<li v-for="item in filterItems(items, searchQuery)" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
searchQuery: '',
items: [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
]
}
},
methods: {
filterItems(items, query) {
return items.filter(item =>
item.name.toLowerCase().includes(query.toLowerCase())
)
}
}
}
</script>
使用第三方库
对于更复杂的过滤需求,可以考虑使用 Lodash 等工具库提供的过滤函数。
import _ from 'lodash'
export default {
computed: {
filteredItems() {
return _.filter(this.items, item =>
item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
)
}
}
}
组合式 API 实现
在 Vue 3 中使用组合式 API 可以更灵活地实现过滤功能。
<template>
<div>
<input v-model="searchQuery" placeholder="Search...">
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
import { computed, ref } from 'vue'
export default {
setup() {
const searchQuery = ref('')
const items = ref([
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
])
const filteredItems = computed(() => {
return items.value.filter(item =>
item.name.toLowerCase().includes(searchQuery.value.toLowerCase())
)
})
return { searchQuery, filteredItems }
}
}
</script>
注意事项

- 对于大数据集,考虑添加防抖功能优化性能
- 复杂过滤条件可以使用正则表达式增强匹配能力
- 服务端过滤可能更适合超大数据集的情况






