el-table动态增加列、行数据,俩种方法实现按需选择

需求:

表格数据过多的时候,需要实现动态选择数据的功能,有俩种方法可以按需选择,解决了表格动态选择时闪屏数据抖动问题。

注意,这个添加数据是tableData原本就有的,我做的这个操作类似就是折叠选择展示原有的数据

1.实现表格数据居中

2.动态添加内容

3.解决表格添加数据后闪屏功能

4.解决了el-dropdown-menu点击后自动关闭问题

1.效果1

使用了el-dropdown嵌套el-checkbox-group实现

2.效果2

使用了el-select的多选实现

3.主要代码讲解

:hide-on-click="false":点击菜单后不隐藏菜单

  <el-dropdown :hide-on-click="false"><span class="el-dropdown-link"> 地址<i class="el-icon-arrow-down el-icon--right"></i> </span><el-dropdown-menu slot="dropdown"><el-dropdown-item><el-checkbox-groupstyle="display: flex; flex-direction: column"v-model="checkList"@change="selectOptions"><el-checkbox :label="item.label" v-for="item in options" :key="item.value"></el-checkbox></el-checkbox-group></el-dropdown-item></el-dropdown-menu></el-dropdown>
3.1:添加数据后窗口抖动解决代码

1.在el-table添加ref='table'

2.每次数据加载完重新渲染表格

    beforeUpdate() {this.$nextTick(() => {//在数据加载完,重新渲染表格this.$refs['table'].doLayout();});}
3.2 数据筛选

根据选择值进行数据筛选,之后再和原有数据进行比对,最后把数据添加到表格数据中实现

   selectOptions(val) {console.log(val, '数据');this.tableFilter = [];let filter = this.options.filter((item) => val.includes(item.label));// let filter = this.options.filter((item) => val.includes(item.value));console.log(filter, '多选数据');filter.forEach((item) => {this.tableFilter.push({prop: item.value,label: item.label});});}

4.效果1完整代码

<template><div class="content-box"><div class="container"><h3>测试</h3><el-tableref="table":data="tableData"style="width: 100%":header-cell-style="{ 'text-align': 'center' }":cell-style="{ 'text-align': 'center' }"><el-table-column prop="date" label="日期" width="180"> </el-table-column><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column width="250" prop="address"><template slot="header" slot-scope="scope"><el-dropdown :hide-on-click="false"><span class="el-dropdown-link"> 地址<i class="el-icon-arrow-down el-icon--right"></i> </span><el-dropdown-menu slot="dropdown"><el-dropdown-item><el-checkbox-groupstyle="display: flex; flex-direction: column"v-model="checkList"@change="selectOptions"><el-checkbox :label="item.label" v-for="item in options" :key="item.value"></el-checkbox></el-checkbox-group></el-dropdown-item></el-dropdown-menu></el-dropdown></template></el-table-column><el-table-columnv-for="(header, index) in tableFilter":key="header.prop":prop="header.prop":label="header.label"width="120px"></el-table-column></el-table></div></div>
</template><script>
export default {data() {return {checkList: [],tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',age: 19,sex: '男'},{date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄',age: 17,sex: '女'},{date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄',age: 20,sex: '男'},{date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',age: 20,sex: '女'}],options: [{value: 'age',label: '年龄'},{value: 'sex',label: '女'}],value1: [],value2: [],tableFilter: []};},methods: {// 查询selectOptions(val) {console.log(val, '数据');this.tableFilter = [];let filter = this.options.filter((item) => val.includes(item.label));// let filter = this.options.filter((item) => val.includes(item.value));console.log(filter, '多选数据');filter.forEach((item) => {this.tableFilter.push({prop: item.value,label: item.label});});}},beforeUpdate() {this.$nextTick(() => {//在数据加载完,重新渲染表格this.$refs['table'].doLayout();});}
};
</script><style lang="scss" scoped>
.box {display: flex;width: 500px;height: 500px;border: 1px solid red;.box_left {background-color: #ddd;}
}
</style>

5.效果2完整代码

<template><div class="content-box"><div class="container"><h3>测试</h3><el-tableref="table":data="tableData"style="width: 100%":header-cell-style="{ 'text-align': 'center' }":cell-style="{ 'text-align': 'center' }"><el-table-column prop="date" label="日期" width="180"> </el-table-column><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column width="250" prop="address"><template slot="header" slot-scope="scope"><div style="display: flex; align-items: center"><div style="width: 60px">地址</div><el-selectv-model="value2"multiplecollapse-tagsstyle="margin-left: 20px"@change="selectOptions"placeholder="请选择"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option></el-select></div></template></el-table-column><el-table-columnv-for="(header, index) in tableFilter":key="header.prop":prop="header.prop":label="header.label"width="120px"></el-table-column></el-table></div></div>
</template><script>
export default {data() {return {checkList: [],tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',age: 19,sex: '男'},{date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄',age: 17,sex: '女'},{date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄',age: 20,sex: '男'},{date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',age: 20,sex: '女'}],options: [{value: 'age',label: '年龄'},{value: 'sex',label: '女'}],value1: [],value2: [],tableFilter: []};},methods: {// 查询selectOptions(val) {console.log(val, '数据');this.tableFilter = [];let filter = this.options.filter((item) => val.includes(item.value));console.log(filter, '多选数据');filter.forEach((item) => {this.tableFilter.push({prop: item.value,label: item.label});});}},beforeUpdate() {this.$nextTick(() => {//在数据加载完,重新渲染表格this.$refs['table'].doLayout();});}
};
</script><style lang="scss" scoped>
.box {display: flex;width: 500px;height: 500px;border: 1px solid red;.box_left {background-color: #ddd;}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/157319.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决AssertionError: Torch not compiled with CUDA enabled

运行环境&#xff1a;win10cdua11.0python3.8pytorch2.0.1 报错语句&#xff1a;weights torch.Tensor(TRAIN_DATASET.labelweights).cuda() 报错信息&#xff1a; Exception has occurred: AssertionError Torch not compiled with CUDA enabled 原因&#xff1a;安装的p…

【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱 | 京东云技术团队

在云原生领域&#xff0c;无论使用哪种编排调度平台&#xff0c;Kubernetes&#xff0c;DockerSwarm&#xff0c;OpenShift等&#xff0c;业务都需要基于镜像进行交付&#xff0c;我们在内部实践“Source-to-image”和链式构建&#xff0c;总而总结出“OneBuild”模式。 其核心…

折纸达珠峰高度(forwhile循环、闭包函数循环)

对折0.1mm厚度的纸张多少次&#xff0c;高度可达珠峰高度8848180mm。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅…

搜维尔科技:Movella xsens助力国际足联,捕捉了一个90分钟的现场足球比赛

在塞维利亚6万人的拉卡图亚体育场的灯光下,安达路亚的两个球队开始了他们激烈的地方竞争的最新篇章。这也许是他们一生中最大的一场游戏,很快就会出现。开球后的一瞬间,咬着滑块的接球手飞了进来,对方的球员互相攻击对方的球。一个迟来的挑战赛点燃了触摸纸,两队互相平手,手臂伸…

【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有13种信号分解FFT傅里叶频谱变换联合算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一…

Idea去掉显示的测试覆盖率

一.启东时 误点击了 快捷键调出 【Ctrl 】【Alt】【F6】

【Java 进阶篇】Java Response 输出字符数据案例

在Java Web开发中&#xff0c;使用HTTP响应对象&#xff08;Response&#xff09;来向客户端发送数据是一项非常重要的任务。本篇博客将详细介绍如何使用Java中的Response对象来输出字符数据&#xff0c;并提供示例代码以帮助读者更好地理解和应用这一概念。不仅将讨论基础知识…

《Pytorch新手入门》第二节-动手搭建神经网络

《Pytorch新手入门》第二节-动手搭建神经网络 一、神经网络介绍二、使用torch.nn搭建神经网络2.1 定义网络2.2 torch.autograd.Variable2.3 损失函数与反向传播2.4 优化器torch.optim 三、实战-实现图像分类(CIFAR-10数据集)3.1 CIFAR-10数据集加载与预处理3.2 定义网络结构3.3…

uniapp黑马优购

配置tabbar 使用 npm install escook/request-miniprogram 进行http请求 挂载到 uni.$http 上 uniapp小程序分包 访问的时候 携带分包目录 /subpkg/goods_detail/goods_detail git分支使用 # 创建并使用分支 git checkout -b home git commit # 推送到远程的home分支…

分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测

分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测 目录 分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-ELM麻雀优化算法优化极限学习机分类预测&#xff08;Matlab完整…

基于Selenium+Python的web自动化测试框架详解

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefo…

在excel中如何打出上标、下标

例如&#xff0c;想把A2的2变为下标。 在单元中输入内容&#xff1a; 选中2&#xff1a; 右键单击&#xff0c;然后点击“设置单元格格式”&#xff1a; 在特殊效果的下面勾选“下标”&#xff0c;然后点击下面的“确定”按钮&#xff1a; 就将2变为下标了&#xff1a;…