vue计算属性实现搜索
使用计算属性实现搜索功能
在Vue中,计算属性(computed properties)非常适合用于实现搜索功能,因为它们可以缓存结果并自动响应依赖数据的变化。
基本实现步骤
创建计算属性来过滤数组数据
computed: {
filteredItems() {
const searchTerm = this.searchTerm.toLowerCase()
return this.items.filter(item =>
item.name.toLowerCase().includes(searchTerm)
)
}
}
在模板中使用v-model绑定搜索输入框

<input v-model="searchTerm" placeholder="搜索...">
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
处理多字段搜索
当需要搜索多个字段时,可以扩展过滤逻辑
computed: {
filteredItems() {
const searchTerm = this.searchTerm.toLowerCase()
return this.items.filter(item =>
item.name.toLowerCase().includes(searchTerm) ||
item.description.toLowerCase().includes(searchTerm)
)
}
}
添加延迟搜索
对于大数据集,可以结合watch和setTimeout实现延迟搜索

data() {
return {
searchTerm: '',
debouncedSearchTerm: '',
debounceTimeout: null
}
},
watch: {
searchTerm(newVal) {
clearTimeout(this.debounceTimeout)
this.debounceTimeout = setTimeout(() => {
this.debouncedSearchTerm = newVal
}, 300)
}
},
computed: {
filteredItems() {
const searchTerm = this.debouncedSearchTerm.toLowerCase()
return this.items.filter(item =>
item.name.toLowerCase().includes(searchTerm)
)
}
}
使用正则表达式实现高级搜索
当需要更复杂的匹配模式时,可以使用正则表达式
computed: {
filteredItems() {
try {
const regex = new RegExp(this.searchTerm, 'i')
return this.items.filter(item => regex.test(item.name))
} catch(e) {
return this.items
}
}
}
结合排序功能
搜索后可以对结果进行排序
computed: {
filteredAndSortedItems() {
const searchTerm = this.searchTerm.toLowerCase()
const filtered = this.items.filter(item =>
item.name.toLowerCase().includes(searchTerm)
)
return filtered.sort((a, b) => a.name.localeCompare(b.name))
}
}
计算属性提供了一种声明式的方法来处理搜索功能,自动处理依赖关系并优化性能,是Vue中实现搜索功能的理想选择。






