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

news2024/11/18 6:43:19

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

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

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

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

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

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" border
          element-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 = [];
},

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纯电动汽车的发展趋势简述

纯电车简介 纯电动汽车是使用电池驱动电动马达而不是传统的内燃机的汽车。它们通常使用电池组储存能量&#xff0c;然后通过电动马达转化为动力来驱动车辆。相比于传统的燃油车&#xff0c;纯电动汽车具有零排放、低噪音、低维护成本等优点&#xff0c;因此在环保和能源效率方…

【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等

前言 工作中常听别人说的本地网络是什么意思&#xff1f;同一网段又是什么意思&#xff1f;它俩有关系吗&#xff1f; 在工作中内经常会遇到相关的网络问题&#xff0c;涉及网络通信中一些常见的词汇&#xff0c;如IP地址、子网掩码、网关和DNS等。具体一点&#xff1a;经常会…

YOLO数据集制作(二)|json文件转txt验证

以下教程用于验证转成YOLO使用的txt格式&#xff0c;适用场景&#xff1a;矩形框&#xff0c;配合json格式文件转成YOLO使用的txt格式脚本使用。 https://blog.csdn.net/StopAndGoyyy/article/details/138681454 使用方式&#xff1a;将img_path和label_path分别填入对应的图…

分布式光伏监控系统功能模块详解

目前&#xff0c;分布式光伏发电系统的总容量比较小&#xff0c;并且光伏电站的功率受外界环境影响容易出现大起大落的现象。这使电压调整变得很困难。光伏电站运行维护人员不足&#xff0c;长时间不保养维护会影响光伏电站的发电效率。针对上述问题&#xff0c;鹧鸪云基于无线…

pip镜像源

1.1 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 1.2 阿里云 https://mirrors.aliyun.com/pypi/simple/ 1.3 网易 https://mirrors.163.com/pypi/simple/ 1.4 豆瓣 https://pypi.douban.com/simple/ 1.5 百度云 https://mirror.baidu.com/pypi/simple/ 1.6 中科大 ht…

LLM Agent智能体综述(超详细)

前言 &#x1f3c6;&#x1f3c6;&#x1f3c6;在上一篇文章中&#xff0c;我们介绍了如何部署MetaGPT到本地&#xff0c;获取OpenAI API Key并配置其开发环境&#xff0c;并通过一个开发小组的多Agent案例感受了智能体的强大&#xff0c;在本文中&#xff0c;我们将对AI Agent…

Java获取请求参数

1.简单参数接收 前端请求参数与Controller接受变量名一致 如果参数名不一致&#xff0c;接受不成功。 可以用RequestParam指定参数名&#xff0c;可以用username接收&#xff08;不推荐&#xff09;。 required true&#xff0c;表示参数必须传递&#xff0c;如果不传递会报错…

c#多态性的应用

设计一个电脑游戏&#xff0c;游戏中有猪、牛、兔子、青蛙、鸭子等动物&#xff0c;这些动 物都继承于Vertebrata 类&#xff08;脊椎动物类&#xff09;&#xff0c;Vertebrata类有一个抽象方法Display()&#xff0c;每个动 物都从Vertebrata 类那里继承并重写了Display()方法…

upload-labs靶场通关详解(1-15)

1.pass-01 查看源代码 是js&#xff0c;属于前端校验 可以通过禁用js来上传文件 2.pass-02 根据提示是MIME绕过 MIME&#xff1a;是设定某种扩展名的文件 用一种应用程序来打开的方式类型&#xff0c;当该扩展名文件被访问的时候&#xff0c;浏览器会自动使用指定应用程序来…

基于springboot+vue+Mysql的在线BLOG网

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

业务上云--从Container+BuildKitd打镜像到在Kubernetes上部署LNMP

一、背景 在基于kubeasz部署kubernetes高可用集群-CSDN博客文章部署的kubernetes集群上部署LNMP 1.1、Kubernetes环境 1.2、Harbor环境 【docker基础】使用Harbor搭建私有仓库-docker-compose使用示例--第二周作业_harbor docker-compose-CSDN博客 Harbor环境升级&#xff…

算法练习day8

反转字符串 代码随想录 0344.反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.05小时&#xff09; 思路 这道题很简单也很经典。 字符串的反转方法有很多&#xff0c;我这里是用for循环通过数组长度和下标计算来交换。…

Git使用(2):远程仓库

一、创建远程仓库 登录码云Gitee - 基于 Git 的代码托管和研发协作平台。 点击右上角&#xff0c;新建仓库。 创建完成&#xff0c;复制仓库地址接下来要使用。 二、将idea项目推送到码云 首先创建本地仓库VCS -> Create Git Repository。然后选择Manage Remotes&#xff0…

pyqt QComboBox下拉列表框控件

pyqt QComboBox下拉列表框控件 QComboBox效果代码 QComboBox QComboBox 是 PyQt&#xff08;中的一个控件&#xff0c;它允许用户从下拉列表中选择一个选项。这个控件在需要用户从预定义选项中进行选择时非常有用。 效果 代码 import sys from PyQt5.QtWidgets import QAppl…

谈谈 Spring 的过滤器和拦截器

前言 我们在进行 Web 应用开发时&#xff0c;时常需要对请求进行拦截或处理&#xff0c;故 Spring 为我们提供了过滤器和拦截器来应对这种情况。那么两者之间有什么不同呢&#xff1f;本文将详细讲解两者的区别和对应的使用场景。 &#xff08;本文的代码实现首先是基于 Sprin…

暗区突围TWITCH掉宝关联帐号不了 无法关联帐号 关联不上

Twitch&#xff0c;作为全球知名的游戏直播平台&#xff0c;常常携手热门游戏如《暗区突围》举办互动活动&#xff0c;为玩家带来独特的参与体验。在这个过程中&#xff0c;“绑定关联”成为了连接直播观众与游戏世界的桥梁。简单来说&#xff0c;Twitch绑定关联《暗区突围》指…

【架构-17】通信系统架构设计理论

通信系统网络架构 1. 局域网网络架构 拓扑结构&#xff1a;星型、总线型、环型、树型。 网络架构&#xff1a;单核心架构&#xff08;结构简单&#xff0c;地理范围受限&#xff09;、双核心架构&#xff08;网络拓扑结构可靠&#xff0c;投资较单核高&#xff09;、环型架构…

四天学会JS高阶(学好vue的关键)——作用域解构箭头函数(理论+实战)(第一天)

一、作用域 提到作用域&#xff08;作用域又分为局部作用域和全局作用域&#xff09;&#xff0c;就要想到变量。因为作用域规定了变量能够被访问的范围&#xff08;也就是作用域是为变量而服务的&#xff09;&#xff0c;为了避免全局变量污染这一情况&#xff0c;所以需要使…

ollama离线部署llama3(window系统)

首先介绍下ollama是什么&#xff1f;Ollama是一个开源的大型语言模型服务工具&#xff0c;旨在为用户提供本地化的运行环境&#xff0c;满足个性化的需求。具体来说&#xff0c;Ollama是一个功能强大的开源框架&#xff0c;可以简化在Docker容器中部署和管理大型语言模型&a…

leetcode算法笔记-算法复杂度

对于时间复杂度&#xff0c;主要包括三种情况&#xff1a; 渐进紧确界&#xff1a; O渐进上界&#xff1a; 渐进下界&#xff1a; 加法原则&#xff1a;不同的时间复杂度相加取阶数最高的 乘法原则&#xff1a;不同的时间复杂度相乘&#xff0c;结果为时间复杂度的乘积 阶乘…