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.x 中已被移除。如果使用 Vue 2.x,可以这样实现:
<template>
<div>
<input v-model="searchQuery" placeholder="Search...">
<ul>
<li v-for="item in items | filterBy(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' }
]
}
},
filters: {
filterBy(list, query) {
return list.filter(item =>
item.name.toLowerCase().includes(query.toLowerCase())
)
}
}
}
</script>
使用第三方库
如果需要更复杂的过滤功能,可以使用 Lodash 或 Fuse.js 等库。例如,使用 Lodash 的 _.filter:

import _ from 'lodash'
export default {
computed: {
filteredItems() {
return _.filter(this.items, item =>
item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
)
}
}
}
使用 Vue 3 的组合式 API
在 Vue 3 中,可以使用 setup 和 ref 或 reactive 来实现过滤:
<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 { ref, computed } 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(() =>
items.value.filter(item =>
item.name.toLowerCase().includes(searchQuery.value.toLowerCase())
)
)
return { searchQuery, filteredItems }
}
}
</script>
动态过滤多个字段
如果需要根据多个字段进行过滤,可以扩展计算属性的逻辑:
computed: {
filteredItems() {
return this.items.filter(item =>
item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
item.description.toLowerCase().includes(this.searchQuery.toLowerCase())
)
}
}
以上方法可以根据实际需求选择或组合使用,以实现灵活的过滤功能。






