el-table组件选中后使用toggleRowSelection无法取消已选中的数据——bug记录-骚操作解决

本文主要是介绍el-table组件选中后使用toggleRowSelection无法取消已选中的数据——bug记录-骚操作解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先说本文重点解决的问题:

存在的问题:当右侧已选中的数据中,删除了左侧其他页面的数据,但是左侧数据切换到其他页面后,左侧还保留选中的状态。

最近在写后台管理系统的时候,遇到一个需求:

左侧是数据源,选中的数据在右侧展示。

在这里插入图片描述
左侧具备的功能:

1.检索
2.分页
3.选中,取消选中

右侧具备的功能:

1.删除
2.修改数量
3.清空所有选中

我之前写过一篇关于el-table跨页多选且回显的实现方式:
elementUi中的table实现跨页多选数据——功能实现:http://t.csdnimg.cn/WzLyL

实现的两个步骤:

1.给el-table绑定唯一的key:row-key=“®=>r.id”
2.<el-table-column type="selection" :reserve-selection="true"></el-table-column>

但是用了上面的步骤,只能实现【跨页多选且回显】

但是想要实现 右侧删除一条后,左侧自动取消勾选,则无法实现:

解决思路:通过toggleRowSelection来切换选中与取消选中

一定要注意:右侧删除,要想实现左侧取消选中,则toggleRowSelection的第一个入参必须是左侧的数据才可以,否则即便是一样的数据,也无法实现。。。
在这里插入图片描述

但是最终效果:如果左侧筛选指定的数据后,此时的data数据源已经更改,右侧只能删除当前页的数据,如果要删除之前选中的数据,则会有bug

存在的问题:当右侧删除了其他页面的数据,但是切换到其他页面后,左侧还保留选中的状态。

【我这边最后的解决办法就是:只能删除当前页面含有的数据】

下面是步骤介绍:

解决步骤1:html部分——左侧

<el-table v-bind:data="RelationList" border ref="relationRef"v-loading="relationLoading"element-loading-text="拼命加载中"stripe :row-key="getRowKey" @@selection-change="handleSelectPlan"style="width: 100%;" :height="370" v-bind:header-cell-style="{'font-size':'14px','text-align':'left','background':'#f7f7f7'}"><el-table-column type="selection" width="55" :reserve-selection="true"></el-table-column><el-table-column prop="JpSkuNo" label="编号"></el-table-column><el-table-column prop="PartNo" label="型号" width="200"></el-table-column><el-table-column prop="Mfg" label="品牌" width="150"></el-table-column><el-table-column prop="Package" label="封装" width="130"></el-table-column><el-table-column prop="StockNum" label="库存量"></el-table-column>
</el-table>

对应的rowKey:

getRowKey(row) {return row.Id;
},

解决步骤2:html部分——右侧

<h4><span>已选条数:<span style="color:red;margin:0 6px;">{{selectPlanArr.length}}</span></span><a @@click="clearSelect" href="javascript:;" style="color:red;cursor:pointer;margin-left:20px;">清空选中</a>
</h4>
<el-table v-bind:data="selectPlanArr" borderelement-loading-text="拼命加载中"stripe :row-key="getRowKey"style="width: 100%;" :height="370" v-bind:header-cell-style="{'font-size':'14px','text-align':'left','background':'#f7f7f7'}"><el-table-column prop="JpSkuNo" label="编号"></el-table-column><el-table-column prop="PartNo" label="型号" width="200"></el-table-column><el-table-column prop="Mfg" label="品牌" width="150"></el-table-column><el-table-column prop="Package" label="封装" width="130"></el-table-column><el-table-column prop="StockNum" label="出库数量" width="140"><template slot-scope="scope"><el-input-number v-model="scope.row.StockNum" :min="0" :max="scope.row.StockNumTotal" :precision="0" size="mini" controls-position="right"></el-input-number></template></el-table-column><el-table-column label="操作" fixed="right"><template slot-scope="scope"><a href="javascript:;" @@click="handleDel(scope.row,scope.$index)" v-if="RelationList&&RelationList.findIndex(item=>item.Id==scope.row.Id)>-1">删除</a></template></el-table-column>
</el-table>

上面的v-if="RelationList&&RelationList.findIndex(item=>item.Id==scope.row.Id)>-1"是当右侧的数据存在于左侧的表格中时,才能够删除,也就是只能删除左侧存在的数据,这样就能避免出现删除了其他页面的数据,但是切换到其他页面后,左侧还保留选中的状态了。

解决步骤3:监听左侧选中事件——selection-change

handleSelectPlan(arr) {this.selectPlanArr = arr;
},

解决步骤4:监听右侧的单条删除事件——handleDel

handleDel(row, index) {this.selectPlanArr.splice(index, 1);this.$refs.relationRef.toggleRowSelection(this.RelationList.find(re => re.Id == row.Id),false);
},

解决步骤5:清空选中——clearSelection

 clearSelect() {this.$refs.relationRef.clearSelection();this.selectPlanArr = [];
},

这篇关于el-table组件选中后使用toggleRowSelection无法取消已选中的数据——bug记录-骚操作解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991467

相关文章

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

解决Failed to get nested archive for entry BOOT-INF/lib/xxx.jar问题

《解决FailedtogetnestedarchiveforentryBOOT-INF/lib/xxx.jar问题》解决BOOT-INF/lib/xxx.jar替换异常需确保路径正确:解... 目录Failed to get nested archive for entry BOOT-INF/lib/xxx

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R