VUE实现表头过滤
VUE实现表头过滤的方法
使用Element UI的Table组件实现
Element UI的Table组件内置了表头过滤功能,可以通过配置column的filters和filter-method属性实现。

<template>
<el-table :data="tableData">
<el-table-column
prop="name"
label="姓名"
:filters="nameFilters"
:filter-method="filterName">
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '张三' },
{ name: '李四' }
],
nameFilters: [
{ text: '张三', value: '张三' },
{ text: '李四', value: '李四' }
]
}
},
methods: {
filterName(value, row) {
return row.name === value
}
}
}
</script>
自定义表头过滤组件
对于需要更复杂过滤逻辑的场景,可以自定义表头过滤组件。

<template>
<div>
<input v-model="filterValue" @input="handleFilter"/>
<table>
<thead>
<tr>
<th>姓名</th>
</tr>
</thead>
<tbody>
<tr v-for="item in filteredData" :key="item.id">
<td>{{ item.name }}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
],
filterValue: ''
}
},
computed: {
filteredData() {
return this.tableData.filter(item =>
item.name.includes(this.filterValue)
)
}
},
methods: {
handleFilter() {
this.$emit('filter-change', this.filterValue)
}
}
}
</script>
使用Vuex管理过滤状态
当过滤逻辑需要跨组件共享时,可以使用Vuex集中管理过滤状态。
// store.js
export default new Vuex.Store({
state: {
tableData: [],
nameFilter: ''
},
getters: {
filteredData: state => {
return state.tableData.filter(item =>
item.name.includes(state.nameFilter)
)
}
},
mutations: {
setNameFilter(state, value) {
state.nameFilter = value
}
}
})
性能优化建议
对于大数据量表格,过滤操作可能导致性能问题。可以采用以下优化措施:
- 使用防抖处理频繁的过滤输入
- 对数据进行分页处理
- 使用Web Worker进行后台过滤计算
- 考虑使用虚拟滚动技术
// 防抖实现示例
methods: {
handleFilter: _.debounce(function() {
this.$store.commit('setNameFilter', this.filterValue)
}, 300)
}
以上方法提供了不同复杂度的Vue表头过滤实现方案,可根据项目需求选择合适的方式。Element UI方案适合快速实现标准功能,自定义组件方案灵活性更高,Vuex方案适合状态管理复杂的应用。






