vue 实现条件搜索
Vue 实现条件搜索的方法
在 Vue 中实现条件搜索功能,可以通过以下方法完成:
使用计算属性过滤数据
通过计算属性结合 filter 方法,可以轻松实现条件搜索功能。定义一个搜索输入框,绑定到 Vue 实例的数据属性,然后在计算属性中过滤数据。

<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: '苹果' },
{ id: 2, name: '香蕉' },
{ id: 3, name: '橙子' }
]
};
},
computed: {
filteredItems() {
return this.items.filter(item =>
item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
);
}
}
};
</script>
使用 watch 监听搜索条件变化
如果需要更复杂的逻辑或异步操作,可以使用 watch 监听搜索条件的变化,并手动更新数据。
<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: '苹果' },
{ id: 2, name: '香蕉' },
{ id: 3, name: '橙子' }
],
filteredItems: []
};
},
watch: {
searchQuery(newVal) {
this.filteredItems = this.items.filter(item =>
item.name.toLowerCase().includes(newVal.toLowerCase())
);
}
},
created() {
this.filteredItems = this.items;
}
};
</script>
结合第三方库(如 Lodash)实现防抖
如果搜索条件频繁变化,可以使用 Lodash 的 debounce 方法减少计算频率,优化性能。

<template>
<div>
<input v-model="searchQuery" placeholder="搜索..." />
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
import { debounce } from 'lodash';
export default {
data() {
return {
searchQuery: '',
items: [
{ id: 1, name: '苹果' },
{ id: 2, name: '香蕉' },
{ id: 3, name: '橙子' }
],
filteredItems: []
};
},
watch: {
searchQuery: debounce(function(newVal) {
this.filteredItems = this.items.filter(item =>
item.name.toLowerCase().includes(newVal.toLowerCase())
);
}, 300)
},
created() {
this.filteredItems = this.items;
}
};
</script>
使用 Vuex 管理搜索状态
对于大型应用,可以使用 Vuex 集中管理搜索条件和过滤逻辑。
<template>
<div>
<input v-model="searchQuery" placeholder="搜索..." />
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
import { mapState, mapGetters } from 'vuex';
export default {
computed: {
...mapState(['items']),
...mapGetters(['filteredItems']),
searchQuery: {
get() {
return this.$store.state.searchQuery;
},
set(value) {
this.$store.commit('setSearchQuery', value);
}
}
}
};
</script>
在 Vuex 中定义状态和逻辑:
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
searchQuery: '',
items: [
{ id: 1, name: '苹果' },
{ id: 2, name: '香蕉' },
{ id: 3, name: '橙子' }
]
},
mutations: {
setSearchQuery(state, value) {
state.searchQuery = value;
}
},
getters: {
filteredItems(state) {
return state.items.filter(item =>
item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
);
}
}
});
总结
Vue 实现条件搜索可以通过计算属性、watch、防抖优化或 Vuex 管理状态来完成。根据项目规模和需求选择合适的方法,确保搜索功能高效且易维护。






