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 (表 ...
随机推荐
- AtCoder Beginner Contest 187 题解
A - Large Digits 按要求求出两个数的每位之和,进行比较即可. 时间复杂度 \(\mathcal{O}(\log(AB))\). B - Gentle Pairs 枚举所有点对求斜率. ...
- Spark SQL 字段血缘在 vivo 互联网的实践
作者:vivo互联网服务器团队-Hao Guangshi 一.背景 字段血缘是在表处理的过程中将字段的处理过程保留下来.为什么会需要字段血缘呢? 有了字段间的血缘关系,便可以知道数据的来源去处,以及字 ...
- <vue 路由 6、动态路由-方法传递参数>
一.query效果 点击query按钮 二.param效果 点击param按钮 注意点 1:重新刷新浏览器后,参数都不在了. 2:url中能看不到传递的参数 3.分别用{{$route. params ...
- 十三、docker的四种网络类型
系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...
- Oracle ORA-01861: 文字与格式字符串不匹配(日期格式导致的问题)
1.问题 如图所示,Oracle ORA-01861: 文字与格式字符串不匹配.这里的日期格式出现问题,导致了ORA-01861错误. 2.解决方式 原因: 如果直接按照字符串方式,或者直接使用to_ ...
- Python Code_02
author : 写bug的盼盼 development time : 2021/8/27 19:59 变量定义 name = '阿哈' print(name) print('标识',id(name) ...
- Git-基本介绍
- [转帖]Ceph简单搭建
https://cloud.tencent.com/developer/article/1643322 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可 ...
- [转帖]Linux Shell编程 循环语法
https://zhuanlan.zhihu.com/ for循环 for 循环是固定循环,也就是在循环时已经知道需要进行几次循环.有时也把 for 循环称为计数循环.语法: for 变量 in 值1 ...
- [转帖]tidb 修改root密码
http://blog.51yip.com/tidb/2452.html 通过 {pd-ip}:{pd-port}/dashboard 登录 TiDB Dashboard,登录用户和口令为 TiD ...