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 (表 ...
随机推荐
- 命令行状态下切换盘符 cd 跨盘
这个经常忘记,在这记下来 cd /d d: 就是加上/d参数
- 题解 CF1388A 【Captain Flint and Crew Recruitment】(思维、贪心)
AC代码: #include<bits/stdc++.h> using namespace std; void solve() { int n; cin >> n; if (n ...
- 前端科普系列(4):Babel —— 把 ES6 送上天的通天塔
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/plJewhUd0xDXh3Ce4CGpHg作者:Morrain 一.前言 在上一节 < ...
- mysql和redis库存扣减和优化
前言 大流量情况下的库存是老生常谈的问题了,在这里我整理一下mysql和redis应对扣除库存的方案,采用jmeter进行压测. JMETER设置 库存初始值50,线程数量1000个,1秒以内启动全部 ...
- 引发C++异常的常见原因(一)从报错地址到错误症状
在进行C++软件开发的过程中,会遇到很多问题,网上差不到,或者查到了也没什么信息可以用,所以这里想到了就将一些常见的问题放在一起,归纳整理一下. 本文主要的内容来源于CSDN的大佬文章:https:/ ...
- Verdi基础-01
Verdi使用目标 生成fsdb波形 查看fsdb波形 追踪RTL代码 目录 Verdi历史 生成fsdb波形 三个变量&&三个命令 变量PATH LD_LIBRARY_PATH so ...
- java: 程序包xxx.xxx.xxx不存在
1.问题 在拷贝进来一个文件夹/文件进入项目后,发生报错:java: 程序包com.itheima.mp.domain.query不存在 2.解决 这里主要是由于我们的文件直接拷贝进来,导致编译的时候 ...
- 这一次,弄明白JS中的文件相关(二):HTTP请求头和响应头
(一)前置知识 开始前,我们先来复习一下HTTP的基础知识. HTTP请求分为:请求行.请求头.空行.请求体(也叫正文.请求实体.请求主体). HTTP响应分为:状态行(也叫响应行).响应头.空行.响 ...
- [转帖]故障分析 | 让top命令直接显示Java线程名?-- 解析OpenJDK的一个bug修复
https://zhuanlan.zhihu.com/p/413136873 作者:阎虎青DBLE 开源项目负责人,负责分布式数据库中间件研发工作:持续专注于数据库方面的技术,始终在一线从事开发:对数 ...
- [转帖]一文读懂 | 如何快速部署 OceanBase 开源版
2021-11-281398 版权 本文涉及的产品 云数据库 RDS MySQL Serverless,0.5-2RCU 50GB 推荐场景: 学生管理系统数据库设计搭建个人博客 立即试用 云防火墙, ...