vue前端实现模糊查询
Vue 前端实现模糊查询的方法
使用 JavaScript 的 filter 和 includes 方法
在 Vue 中,可以通过计算属性或方法对数组进行过滤,结合 includes 方法实现模糊查询。
<template>
<div>
<input v-model="searchQuery" placeholder="搜索...">
<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>
使用正则表达式实现更灵活的匹配
如果需要更复杂的模糊匹配,可以使用正则表达式。
computed: {
filteredItems() {
const query = this.searchQuery.toLowerCase()
const regex = new RegExp(query, 'i')
return this.items.filter(item => regex.test(item.name))
}
}
结合 Lodash 的 debounce 优化性能
频繁输入时,可以使用 Lodash 的 debounce 函数减少计算频率,提升性能。
import { debounce } from 'lodash'
export default {
data() {
return {
searchQuery: '',
filteredItems: []
}
},
watch: {
searchQuery: debounce(function(newVal) {
this.filteredItems = this.items.filter(item =>
item.name.toLowerCase().includes(newVal.toLowerCase())
)
}, 300)
}
}
使用第三方库 Fuse.js 实现高级模糊搜索
Fuse.js 是一个强大的模糊搜索库,支持更复杂的匹配逻辑。
import Fuse from 'fuse.js'
export default {
data() {
return {
searchQuery: '',
fuse: null,
items: [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
]
}
},
created() {
this.fuse = new Fuse(this.items, {
keys: ['name'],
threshold: 0.3
})
},
computed: {
filteredItems() {
return this.searchQuery
? this.fuse.search(this.searchQuery).map(result => result.item)
: this.items
}
}
}
结合 Vuex 实现全局搜索
如果项目使用 Vuex,可以将搜索逻辑放在 store 中统一管理。
// store.js
const store = new Vuex.Store({
state: {
items: [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
],
searchQuery: ''
},
getters: {
filteredItems: state => {
return state.items.filter(item =>
item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
)
}
}
})
以上方法可以根据项目需求选择使用,从简单到复杂逐步扩展功能。







