el-table中保留分页选中

news/2024/7/5 4:42:23

场景:对数据表格中数据进行选取,然后保存的数据操作。

对于数据表格,貌似这种需求不是非常常用,对于小数据量来说,checkbox就已经能够足够满足我们的要求,但往往对于大数据量可能需要通过表格来实现选择。

el-tableTable-column Attributes 中有这么一个属性:

属性描述类型可选值默认值
reserve-selection仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key)Booleanfalse

不过需要指定行的key,我们可以在el-table上加上一个row-key属性来指定key

最终代码如下

<template>
	<el-table ref="dataTable" :data="tableList" :row-key="getRowKeys" border>
		<el-table-column type="selection" width="55" reserve-selection></el-table-column>
	</el-table>
</template>

<script>
	export default {
		data() {
			return {
				tableList: []
			}
		},
		methods: {
			// 获取行的key,用于表格保留分页选中
			getRowKeys(row) {
				return row.id;
			}
		}
	}
</script>

下面提供分页多选且赋初始选中的方案

<template>
	<el-table ref="dataTable" :data="tableList" :row-key="getRowKeys" @select="handleSelectionChange" border>
		<el-table-column type="selection" reserve-selection></el-table-column>
	</el-table>
</template>

<script>
	import service from './service'
	export default {
		data() {
			return {
				tableList: [], // 表格数据
				defaultSelectedIds: [], // 默认选中数据ID
				multipleSelection: [] // 选中的所有行数据
			}
		},
		methods: {
			// 获取行的key,用于表格保留分页选中
			getRowKeys(row) {
				return row.id;
			},
			handleSelectionChange(selection, row) {
				// 判断如果是取消选中,且在defaultSelectedIds中含有的,则删掉
				const index = this.defaultSelectedIds.indexOf(row.id);
				if (this.multipleSelection.length > selection.length && index !== -1) {
					this.defaultSelectedIds.splice(index, 1);
				}
				this.multipleSelection = selection;
			},
			getTableList() {
				service.getDataList().then(res => {
					this.tableList = res.list;
					
					// 判断在defaultSelectedIds中含有的,通过方法去选中,保留defaultSelectedIds是因为defaultSelectedIds中的值无法对全部页选中
					this.$nextTick(() => {
						if (this.tableList && this.defaultSelectedIds) {
							this.tableList.forEach(row => {
								if (this.defaultSelectedIds.includes(row.id)) {
									this.multipleSelection.push(row);
									this.$refs.dataTable.toggleRowSelection(row, true);
								}
							});
						}
					});
				});
			}
		}
	}
</script>

http://lihuaxi.xjx100.cn/news/1503013.html

相关文章

vscode搭建springboot开发环境

前言 idea好用到但是收money&#xff0c;eclipse免费但是界面有点丑&#xff0c;所以尝试使用vscode开发springboot 提前准备 安装jdk&#xff0c;jdk需要大于11 安装vscode 安装maven 安装插件 主要是下面的插件 Extension Pack for JavaSpring Boot Extension PackDepe…

【高阶产品策略】策略产品数据与行为分析方法

文章目录 1、策略产品数据与用户行为数据分析概述2、埋点、策略数据收集核心技能3、用户行为数据分析应用4、数据平台实施 1、策略产品数据与用户行为数据分析概述 2、埋点、策略数据收集核心技能 3、用户行为数据分析应用 4、数据平台实施

01JVM_内存结构

一、什么是JVM 1.JVM的定义 Java程序的运行环境&#xff0c;java二进制字节码的运行环境 2.JVM的好处 ①一次编写&#xff0c;到处运行 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下标越界检查 ④多态 3.jvm&#xff0c;jre&#xff0c;jdk的比较 3.常见的JVM 主…

Java 的线程安全机制之`synchronized`

前言&#xff1a;首先&#xff0c;线程表示一条单独的执行流&#xff0c;每个线程有自己的执行计数器&#xff0c;有自己的栈&#xff0c;但可以共享内存&#xff0c;共享内存是实现线程协作的基础&#xff0c;但共享内存有两个问题&#xff0c;竞态条件和内存可见性。解决这些…

解决RabbitMQ报错Stats in management UI are disabled on this node

文章目录 问题描述&#xff1a;解决步骤&#xff1a;进入容器后&#xff0c;cd到以下路径修改 management_agent.disable_metrics_collector false退出容器重启rabbitmq容器 问题描述&#xff1a; linux 部署 rabbitmq后&#xff0c;打开rabbitmq管理界面。点击channels&#…

【设计模式】Head First 设计模式——抽象工厂模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 提供一个接口&#xff0c;让该接口负责创建一…

如何做好银行统一报送系统UI设计

北京蓝蓝设计公司是一支由清华美院毕业的专业团队组成的设计公司。我们的设计师们在金融银行软件领域拥有12年的工作经验和丰富的行业知识。 在工作中我们常常思考银行金融反洗钱软件用户使用痛点是什么&#xff1f;我们发现用户的使用痛点往往是&#xff1a; 1功能入口不清晰…

java运行程序流程

java运行程序流程 检查JDK环境 java -version 新建Java文件&#xff08;源文件&#xff09;Hello.java 打开记事本&#xff0c;输入 public class Hello {public static void main(String[] args) {System.out.println("Hello");} } 保存文件&#xff0c;把文件后缀…