效果

步骤

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表格筛选,根据表头属性显示隐藏列的更多相关文章

  1. element ui表格表头顺序错乱的问题

    因为在项目中两个表格共用了同一个组件, 但由于表头不完全相同, 就通过v-if来控制表头的显示隐藏,没想到造成了表头顺序的错乱, 经过多方查找资料,最后找到了解决方法: 即为每一列el-table-c ...

  2. element ui 表格提交时获取所有选中的checkbox的数据

    <el-table ref="multipleTable" :data="appList" @selection-change="changeF ...

  3. 使用 iview Table 表格组件修改操作的显示隐藏

    使用 iview Table 表格组件修改操作的显示隐藏,如下图 1.如何设置 table 操作按后台传入的状态值去渲染 不同的按钮? 解决方法 我们在vue2中,动态渲染html 使用的是 retu ...

  4. Ext根据条件显示隐藏列

    Ext根据条件显示隐藏列 写在ExtonReady函数里面,并在表格成功渲染之后,可以添加判断是否隐藏或者显示某一列 /* 判断是否显示版本号一列 */ var showVersionFlag = ' ...

  5. Easyui datagrid 显示隐藏列

    html:         <div style="float: left; width: 1450px; height:auto;  ">             & ...

  6. vue + element ui 表格自定义表头,提供线上demo

    前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...

  7. element ui table render-header自定义表头信息使用

    在使用vue自定义组件内容过程之中,我们绝大多数情况下都是通过预先写好不同的html模板,再通过props传入不同的值来渲染不同的模板.例如我们需要实现一个<v-title size='1'&g ...

  8. Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能

    业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...

  9. vue2.0+Element UI 表格前端分页和后端分页

    之前写过一篇博客,当时对element ui框架还不太了解,分页组件用 html + css 自己写的,比较麻烦,而且只提到了后端分页 (见 https://www.cnblogs.com/zdd20 ...

  10. element UI表格行高、padding等设置报错问题

    element UI里面表格的行高需要自己调整高度和设置padding,直接写style是不行的,里面有 : 1.row-style (行的 style) 2.header-row-styl   (表 ...

随机推荐

  1. 我的2023年度关键词:ChatGPT、生产力工具

    2023 是 AI 大爆发的一年,这一年我在我的生产力工具中(一个叫 lowcode 的 vscode 插件)接入了 ChatGPT API,插件也进行了重构,日常搬砖也因为 ChatGPT 的引入发 ...

  2. <vue 路由 7、导航守卫>

    导航守卫 一.     知识点 1.什么是导航守卫? (1)vue-router提供的导航守卫主要用来监听路由的进入和离开. (2)vue-router提供了beforeEach和afterEach的 ...

  3. C# 排序算法2:选择排序

    选择排序法 ,是在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换:在剩下的数当中找最小的与第二个位置的数交换,即顺序放在已排好序的数列的最后,如此循环,直到全部数据元素排完为止. 原 ...

  4. python常见面试题讲解(九)字符个数统计

    题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里.不在范围内的不作统计.注意是不同的字符 输入描述: 输入N个字符,字符在 ...

  5. 基于taro搭建小程序多项目框架

    前言 为什么需要这样一个框架,以及这个框架带来的好处是什么? 从字面意思上理解:该框架可以用来同时管理多个小程序,并且可以抽离公用组件或业务逻辑供各个小程序使用.当你工作中面临这种同时维护多个小程序的 ...

  6. 基于python的视频点播网站(python+django+vue开发的视频点播网站-视频管理系统)

    演示地址 前台地址: http://video.gitapp.cn 后台地址:http://video.gitapp.cn/admin 后台管理帐号: 用户名:admin123 密码:admin123 ...

  7. MCU芯片设计流程

    MCU设计流程 1.产品开发整体流程 Integrated Product Development(IPD) TR-Technique Review-技术评审 xDCP-管理层决定是否开发 这里的验证 ...

  8. Go-测试-testing

  9. [转帖]CPU写入512bit要多久:从AVX到NEON

    https://zhuanlan.zhihu.com/p/677124882 写这篇文章的原因是有个项目需要降低延迟,希望能更快地把512bit的数据从内存搬进PCIe设备.原先的做法是软件写寄存器通 ...

  10. [转帖]Prometheus Shell Exporter

    Shell Exporter can execute Powershell or Bash scripts and transform its output to Prometheus metrics ...