vue实现组合查询
Vue 实现组合查询的方法
在 Vue 中实现组合查询通常涉及表单输入绑定、数据过滤和动态查询逻辑。以下是几种常见方法:
表单输入绑定
使用 v-model 绑定多个查询条件到 Vue 实例的 data 属性:
data() {
return {
queryParams: {
name: '',
age: '',
status: ''
},
items: [] // 原始数据
}
}
模板部分:
<input v-model="queryParams.name" placeholder="姓名">
<input v-model="queryParams.age" type="number" placeholder="年龄">
<select v-model="queryParams.status">
<option value="">全部</option>
<option value="active">活跃</option>
<option value="inactive">非活跃</option>
</select>
计算属性过滤
通过计算属性实现实时过滤:
computed: {
filteredItems() {
return this.items.filter(item => {
return (
(this.queryParams.name === '' ||
item.name.includes(this.queryParams.name)) &&
(this.queryParams.age === '' ||
item.age == this.queryParams.age) &&
(this.queryParams.status === '' ||
item.status === this.queryParams.status)
)
})
}
}
方法触发查询
对于大数据集可使用方法手动触发查询:
methods: {
search() {
this.filteredItems = this.items.filter(item => {
// 过滤逻辑同上
})
}
}
模板添加查询按钮:
<button @click="search">查询</button>
使用 Vuex 管理状态
大型应用可通过 Vuex 集中管理查询状态:
// store.js
state: {
queryParams: {
name: '',
age: '',
status: ''
},
items: []
},
getters: {
filteredItems: state => {
return state.items.filter(item => {
// 过滤逻辑
})
}
}
第三方库集成
复杂查询场景可集成 Lodash 等工具库:
import _ from 'lodash'
computed: {
filteredItems() {
return _.filter(this.items, this.queryParams)
}
}
服务端查询
需要服务端过滤时通过 axios 发送查询参数:
methods: {
async search() {
const res = await axios.get('/api/items', {
params: this.queryParams
})
this.items = res.data
}
}
以上方法可根据具体需求组合使用,计算属性适合实时查询,方法触发适合手动查询,服务端查询适合大数据量场景。







