element-ui表格筛选,根据表头属性显示隐藏列
效果:

步骤:
1、标签上添加要过滤的源数组
<el-table-column
label="标签"
:filters="filterList"
filter-placement="bottom-end"
>
// 表格列
columnList: [
{ show: true, prop: "date", label: "日期" },
{ show: true, prop: "name", label: "姓名" },
{ show: true, prop: "age", label: "年龄" },
{ show: false, prop: "address", label: "地址" }
], getFilterList(){
this.filterList = this.columnList.map(ele => {
return {
text:ele.label,
value:ele.label
}
});
}
2、找出默认要显示的过滤项

let list = this.$refs.filterTable.columns; // 找出默认要显示的列
let filteredList = this.columnList.map(item => {
if (item.show) {
return item.label;
}
});
list[list.length - 1].filteredValue = filteredList;
3、当表格的筛选条件发生变化的时候过滤表格列
//当表格的筛选条件发生变化的时候会触发该事件
filterFn(filters) {
let arr = [];
for (const key in filters) {
if (Object.hasOwnProperty.call(filters, key)) {
arr = filters[key];
}
}
let arr2 = arr.filter(Boolean);//剔除掉undefined
console.log(arr2);
if (arr2.length > 0) {
this.columnList.forEach(ele => {
if (arr.indexOf(ele.label) > -1) {
ele.show = true;
} else {
ele.show = false;
}
});
} else {//重置时表格的筛选条件会置空
this.columnList.forEach(ele => {
if (["日期", "姓名", "年龄"].indexOf(ele.label) > -1) {
ele.show = true;
} else {
ele.show = false;
}
}); //重新赋值默认显示的列
let list = this.$refs.filterTable.columns;
let filteredList = this.columnList.map(item => {
if (item.show) {
return item.label;
}
});
// filtered-value 选中的数据过滤项,如果需要自定义表头过滤的渲染方式,可能会需要此属性。
list[list.length - 1].filteredValue = filteredList;
}
},
完整代码:

<template>
<div>
<el-table ref="filterTable" :data="tableData" @filter-change="filterFn" style="width: 100%">
<template v-for="item in columnList">
<el-table-column :key="item.prop" :label="item.label" v-if="item.show">
<template slot-scope="scope">
<span>{{scope.row[item.prop]}}</span>
</template>
</el-table-column>
</template>
<el-table-column
label="标签"
:filters="filterList"
filter-placement="bottom-end"
>
<template slot-scope="scope">
<el-tag
:type="scope.row.tag === '家' ? 'primary' : 'success'"
disable-transitions
>{{scope.row.tag}}</el-tag>
</template>
</el-table-column>
</el-table>
</div>
</template> <script>
export default {
data() {
return {
tableData: [
{
date: "2016-05-02",
name: "王小虎",
age: 18,
address: "上海市普陀区金沙江路 1518 弄",
tag: "家"
},
{
date: "2016-05-04",
name: "王小虎",
age: 18,
address: "上海市普陀区金沙江路 1517 弄",
tag: "公司"
},
{
date: "2016-05-01",
name: "王小虎",
age: 18,
address: "上海市普陀区金沙江路 1519 弄",
tag: "家"
},
{
date: "2016-05-03",
name: "王小虎",
age: 18,
address: "上海市普陀区金沙江路 1516 弄",
tag: "公司"
}
],
// 表格列
columnList: [
{ show: true, prop: "date", label: "日期" },
{ show: true, prop: "name", label: "姓名" },
{ show: true, prop: "age", label: "年龄" },
{ show: false, prop: "address", label: "地址" }
],
filterList:[]
};
},
methods: {
//当表格的筛选条件发生变化的时候会触发该事件
filterFn(filters) {
let arr = [];
for (const key in filters) {
if (Object.hasOwnProperty.call(filters, key)) {
arr = filters[key];
}
}
let arr2 = arr.filter(Boolean);//剔除掉undefined
console.log(arr2);
if (arr2.length > 0) {
this.columnList.forEach(ele => {
if (arr.indexOf(ele.label) > -1) {
ele.show = true;
} else {
ele.show = false;
}
});
} else {//重置时表格的筛选条件会置空
this.columnList.forEach(ele => {
if (["日期", "姓名", "年龄"].indexOf(ele.label) > -1) {
ele.show = true;
} else {
ele.show = false;
}
}); //重新赋值默认显示的列
let list = this.$refs.filterTable.columns;
let filteredList = this.columnList.map(item => {
if (item.show) {
return item.label;
}
});
// filtered-value 选中的数据过滤项,如果需要自定义表头过滤的渲染方式,可能会需要此属性。
list[list.length - 1].filteredValue = filteredList;
}
},
getFilterList(){
this.filterList = this.columnList.map(ele => {
return {
text:ele.label,
value:ele.label
}
});
}
},
mounted() {
this.getFilterList()
let list = this.$refs.filterTable.columns; // 找出默认要显示的列
let filteredList = this.columnList.map(item => {
if (item.show) {
return item.label;
}
});
list[list.length - 1].filteredValue = filteredList;
}
};
</script>
element-ui表格筛选,根据表头属性显示隐藏列的更多相关文章
- element ui表格表头顺序错乱的问题
因为在项目中两个表格共用了同一个组件, 但由于表头不完全相同, 就通过v-if来控制表头的显示隐藏,没想到造成了表头顺序的错乱, 经过多方查找资料,最后找到了解决方法: 即为每一列el-table-c ...
- element ui 表格提交时获取所有选中的checkbox的数据
<el-table ref="multipleTable" :data="appList" @selection-change="changeF ...
- 使用 iview Table 表格组件修改操作的显示隐藏
使用 iview Table 表格组件修改操作的显示隐藏,如下图 1.如何设置 table 操作按后台传入的状态值去渲染 不同的按钮? 解决方法 我们在vue2中,动态渲染html 使用的是 retu ...
- Ext根据条件显示隐藏列
Ext根据条件显示隐藏列 写在ExtonReady函数里面,并在表格成功渲染之后,可以添加判断是否隐藏或者显示某一列 /* 判断是否显示版本号一列 */ var showVersionFlag = ' ...
- Easyui datagrid 显示隐藏列
html: <div style="float: left; width: 1450px; height:auto; "> & ...
- vue + element ui 表格自定义表头,提供线上demo
前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...
- element ui table render-header自定义表头信息使用
在使用vue自定义组件内容过程之中,我们绝大多数情况下都是通过预先写好不同的html模板,再通过props传入不同的值来渲染不同的模板.例如我们需要实现一个<v-title size='1'&g ...
- Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能
业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...
- vue2.0+Element UI 表格前端分页和后端分页
之前写过一篇博客,当时对element ui框架还不太了解,分页组件用 html + css 自己写的,比较麻烦,而且只提到了后端分页 (见 https://www.cnblogs.com/zdd20 ...
- element UI表格行高、padding等设置报错问题
element UI里面表格的行高需要自己调整高度和设置padding,直接写style是不行的,里面有 : 1.row-style (行的 style) 2.header-row-styl (表 ...
随机推荐
- 同步时间,为什么我选 Chrony 而不是 NTP ?
初识 chrony chrony 是网络时间协议(Network Time Protocol )的通用实现 它不但可以提供保持系统时间与 NTP 时钟服务器同步的服务,还能作为 NTP 服务器对其他服 ...
- AtCoder Beginner Contest 185 题解
A - ABC Preparation 排序找出最小值 int main() { ios_base::sync_with_stdio(false), cin.tie(0); vector<int ...
- OpenSCA用开源的方式做开源风险治理:Why? What? How?
随着容器.微服务等新技术的快速迭代,开源软件已成为业界主流形态,开源和云原生时代的到来导致软件供应链越来越趋于复杂化和多样化,网络攻击者开始采用软件供应链攻击作为击破关键基础设施的的重要突破口,从而导 ...
- google浏览器网页截取全屏
本想在谷歌浏览器滚动截取网页全屏,没有找到好的方法,在网上找到一个快捷键,未曾使用过,特地记录下: 第一步:按F12打开 第二步:window:Ctrl + Shift + P mac:command ...
- wireshark 报文颜色
在使用wireshark抓包分析的过程中,默认会对不同的包进行着色,截图如下: 对不同的颜色有了解,可快速的过滤包或分析请求. 菜单栏选择视图-->着色规则,即可看到不同颜色代表的含义: 大致可 ...
- 基于AHB_BUS的eFlash控制器设计-软硬件系统设计
eFlash软硬件系统设计 软硬件划分 划分好软硬件之后,IP暴露给软件的寄存器和时序如何? 文档体系:详细介绍eflash控制器的设计文档 RTL代码编写:详细介绍eflash控制器的RTL代码 1 ...
- [转帖]Linux 下rsync命令详细整理
https://blog.csdn.net/weixin_44052462/article/details/116134761 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面 ...
- [转帖]linux 内核协议栈 TCP time_wait 原理、配置、副作用
https://my.oschina.net/u/4087916/blog/3051356 0. 手把手教你做中间件.高性能服务器.分布式存储技术交流群 手把手教你做中间件.高性能服务器.分布式存 ...
- [转帖]从理论到实践,异步I/O模式下NVMe SSD高性能之道
在早期NVMe的讨论话题中,常常将之AHCI协议进行对比,在支持的最大队列深度.并发进程数以及消耗时钟周期数等方面,NVMe吊打了AHCI.最直观也最权威的就是下面这张对比图片. NVMe与AHCI协 ...
- [转帖]备份VCSA内置Postgresql数据库
首先命令行远程登录到VCSA服务器,然后执行如下命令停掉VCSA的核心服务vmware-vpxd: vCenterServerAppliance:~ # service vmware-vpxd sto ...