解决el-table组件中,分页后数据的勾选、回显问题?

news2024/11/17 22:34:39

问题描述:

    1、记录一个弹窗点击确定按钮后,table列表所有勾选的数据信息

    2、再次打开弹窗,回显勾选所有保存的数据信息

    3、遇到的bug:切换分页,其他页面勾选的数据丢失;点击确认只保存当前页的数据;勾选数据保存后但并未回显......

解决方法:

<Modal
  v-model="showPersons"       
  title="人员列表"             <!-- 模态框的标题 -->
  @on-cancel="onClose3"       <!-- 取消按钮的点击事件处理函数 -->
  width="40%"                 <!-- 模态框的宽度 -->
  :mask-closable="false"      <!-- 是否可以通过点击遮罩层关闭模态框 -->
>
  <Form :model="personsForm" :label-width="60" inline>     <!-- 表单组件,绑定数据模型personsForm -->
    <FormItem label="姓名:">        <!-- 表单项的标签 -->
      <Input v-model.trim="personsForm.userName" clearable></Input>   <!-- 输入框组件,绑定数据模型personsForm.userName,可清空输入内容 -->
    </FormItem>
    <div class="btns">             <!-- 按钮容器 -->
      <Button @click="onReset1" style="margin-right: 8px">重 置</Button>     <!-- 重置按钮,点击事件处理函数onReset1 -->
      <Button type="primary" @click="userNameSearch">查 询</Button>        <!-- 查询按钮,点击事件处理函数userNameSearch -->
    </div>
  </Form>
  <el-table
    v-if="showPersons"           <!-- 控制表格的显示与隐藏 -->
    ref="personsTable"           <!-- 表格的引用名 -->
    :data="personsList"          <!-- 表格的数据源 -->
    style="margin-top: 16px"     <!-- 表格的样式 -->
    row-key="user_id"            <!-- 表格行的唯一标识符 -->
    @select="handleSelectionChange"   <!-- 选择某一行时的事件处理函数handleSelectionChange -->
    @select-all="handleAllChange"      <!-- 全选/取消全选时的事件处理函数handleAllChange -->
  >
    <el-table-column
      type="selection"           <!-- 表格列的类型为选择列 -->
      width="45"                 <!-- 表格列的宽度 -->
      :reserve-selection="true"  <!-- 保留之前的选择状态 -->
      align="center"             <!-- 表格列的对齐方式为居中 -->
      fixed                      <!-- 表格列固定在左侧 -->
    />
    <el-table-column label="序号" width="55" fixed align="center">   <!-- 表格列的标签、宽度、对齐方式 -->
      <template slot-scope="scope">        <!-- 自定义列模板 -->
        {{ scope.$index + 1 }}             <!-- 显示行号 -->
      </template>
    </el-table-column>
    <el-table-column
      label="姓名"                         <!-- 表格列的标签 -->
      prop="user_name"                    <!-- 表格列绑定的数据字段 -->
      :show-overflow-tooltip="true"       <!-- 当内容溢出时显示tooltip -->
    />
  </el-table>
  <Page
    v-show="personTotal > 0"              <!-- 控制分页组件的显示与隐藏 -->
    :total="personTotal"                  <!-- 总条目数 -->
    size="small"                          <!-- 分页组件的尺寸 -->
    show-elevator                         <!-- 显示跳转输入框 -->
    show-sizer                            <!-- 显示每页条数选择框 -->
    show-total                            <!-- 显示总条目数 -->
    class="page"                          <!-- 分页组件的样式类名 -->
    :page-size-opts="[10, 20, 30, 40]"     <!-- 每页条数的选项 -->
    :page-size="personsForm.pageSize"     <!-- 每页条数的绑定值 -->
    :current="personsForm.pageNo"         <!-- 当前页码的绑定值 -->
    @on-change="changePersonsPage"        <!-- 页码变化时的事件处理函数changePersonsPage -->
    @on-page-size-change="personsPageSizeChange"   <!-- 每页条数变化时的事件处理函数personsPageSizeChange -->
  />
  <div slot="footer" align="center">       <!-- 模态框底部的插槽内容 -->
    <Button type="primary" @click="personsSubmit">确 定</Button>   <!-- 确定按钮,点击事件处理函数personsSubmit -->
  </div>
</Modal>

在data中定义暂存勾选的人员Id和人员姓名:

data () {
    return {
        personsList: [], // 人员列表list
        echoList: [],// 人员选中的所有id
        echoListName: []// 人员选中的所有名字
    }

首先需要通过接口获取所有待勾选的人员信息,回显之前暂存的数据信息:

// 获取参会人员列表  获取全部人员名单
    getpersonsList (pageNo, pageSize) {
      //调用接口
      personsList(this.personsForm).then((response) => {
        this.personTotal = response.page.total
        this.personsList = response.data  //暂存所有的人员信息
        this.$nextTick(() => {
          this.personsList.forEach(item => {
            //查询当前列表并回显
            if (this.echoList.includes(item.user_id)) {
              //设置当前行数据为选中状态
              this.$refs.personsTable.toggleRowSelection(item, true); 
            }
          })
        })
      })
    }

其中“ @on-cancel="onClose3" ”表示关闭modal弹窗后进行的操作:保存勾选数据、清空勾选效果、清空form表单、重置分页信息

    // 关闭人员列表弹框
 onClose3 () {
      this.showPersons = false  //关闭modal弹窗
      this.echoList = []  //置空暂存的勾选人员Id
      this.echoListName = []  //置空暂存的勾选人员姓名
      this.$refs.personsTable.clearSelection();  //清空未保存勾选
      this.personsForm.pageSize = 10
      this.personsForm.pageNo = 1
      this.personsForm.userName = null
    }

" @select ",“ @select-all ”官网解释如下:
在这里插入图片描述
具体实现代码及解释如下:

   // 选择参会人员(已经存在的数据就取消勾选、未存在过的数据就加入勾选)
    handleSelectionChange(selecteds, row) {
      if (!this.echoList.includes(row.user_id)) {
        this.echoList.push(row.user_id);  //暂存新勾选的人员Id
        this.echoListName.push(row.user_name);  //暂存新勾选的人员姓名
      } else {
        this.echoList.forEach((id, index) => {
          if (id == row.user_id) {
            this.echoList.splice(index, 1);  //删除暂存的需要取消勾选的人员Id
            this.echoListName.splice(index, 1);  //删除暂存的需要取消勾选的人员姓名
          }
        });
      }
    },
    // 全选、取消全选
    handleAllChange(selecteds) {
      if (selecteds.length > 0) {
        selecteds.forEach(item => {
          if (!this.echoList.includes(item.user_id)) {
            this.echoList.push(item.user_id);  //暂存新勾选的人员Id
            this.echoListName.push(item.user_name);  //暂存新勾选的人员姓名
          }
        });
      } else {
        this.personsList.forEach(item => {
          this.echoList.forEach((id, index) => {
            if (id === item.user_id) {
              this.echoList.splice(index, 1);  //删除暂存的需要取消勾选的人员Id
              this.echoListName.splice(index, 1);  //删除暂存的需要取消勾选的人员姓名
            }
          });
        });
      }
    }

最后,记得在关闭弹窗时清空勾选及表单:

   this.echoList = []
      this.echoListName = []
      this.$refs.personsTable.clearSelection();
      this.personsForm.userName = null;

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

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

相关文章

spring boot集成mybatis和springsecurity实现登录认证功能

参考了很多网上优秀的教程&#xff0c;结合自己的理解&#xff0c;实现了登录认证功能&#xff0c;不打算把理论搬过来&#xff0c;直接上代码可能入门更快&#xff0c;文中说明都是基于我自己的理解写的&#xff0c;可能存在表述或者解释不对的情况&#xff0c;如果需要理论支…

linux内核使用ppm图片开机

什么是ppm图片 PPM&#xff08;Portable Pixmap&#xff09;是一种用于存储图像的文件格式。PPM图像文件以二进制或ASCII文本形式存储&#xff0c;并且是一种简单的、可移植的图像格式。PPM格式最初由Jef Poskanzer于1986年创建&#xff0c;并经过了多次扩展和修改。 PPM图像…

金蝶云星空协同开发环境应用内执行单据类型脚本

文章目录 金蝶云星空协同开发环境应用内执行单据类型脚本业务界面查询单据类型表数据导出数据执行数据库脚本单据类型xml检验是否执行成功检查数据库检查业务数据 金蝶云星空协同开发环境应用内执行单据类型脚本 业务界面 查询单据类型表数据 先使用类型中文在单据类型多语言…

Windows10之wsl-Linux子系统安装JDK、Maven环境

Windows10之wsl-Linux子系统安装JDK、Maven环境 文章目录 1.环境2.安装2.1安装JDK2.1安装maven 3.配置setting.xml4.下载编译项目插件5.总结 1.环境 首先需要在windwos10上安装wsl的Linux子系统&#xff0c;我选择的是CentOs的操作系统的镜像(之前的文章中采用的是docker拉取一…

嵌入式开发人员需要具备哪些能力?

大家好&#xff0c;今天给大家介绍嵌入式开发人员需要具备哪些能力&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式开发人员需要具备以下能力&#xff1a; 熟练掌握C/C语…

腾讯云Linux云服务器禁Ping设置

腾讯云Linux服务器默认是允许ping包的&#xff0c;但是在一些情况下为了安全考虑起见&#xff0c;我们都会把服务器设置为禁ping的模式。 1、首先检查Linux服务器当前是否禁ping 执行命令&#xff1a; cat /proc/sys/net/ipv4/icmp_echo_ignore_all 备注&#xff1a; 0----代…

Android画布Canvas绘图scale translate,Kotlin

Android画布Canvas绘图scale & translate&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"…

maven jar sort

1&#xff09;往常项目结构lib包排序 2&#xff09;maven的默认是没有排序的

2019年第八届数学建模国际赛小美赛A题放射性产生的热量解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 A题 放射性产生的热量 原题再现&#xff1a; 假设我们把一块半衰期很长的放射性物质做成一个特定的形状。在这种材料中&#xff0c;原子核在衰变时会以随机的方向释放质子。我们假设携带质子的能量是一个常数。质子在穿过致密物质时&#x…

【STM32】STM32学习笔记-OLED调试工具(09)

00. 目录 文章目录 00. 目录01. STM32调试方式02. OLED简介03. 0.96寸OLED模块04. 0.96寸OLED驱动IC05. 0.96寸OLED原理图06. 硬件电路07. OLED驱动函数08. 附录 01. STM32调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串…

Tekton 克隆 git 仓库

Tekton 克隆 git仓库 介绍如何使用 Tektonhub 官方 git-clone task 克隆 github 上的源码到本地。 git-clone task yaml文件下载地址&#xff1a;https://hub.tekton.dev/tekton/task/git-clone 查看git-clone task yaml内容&#xff1a; 点击Install&#xff0c;选择一种…

微服务组件Sentinel的学习(3)

Sentinel 隔离和降级Feign整合Sentinel线程隔离熔断降级熔断策略 授权规则&#xff1a;自定义异常 隔离和降级 虽然限流可以尽量避免因高并发而引起的服务故障&#xff0c;但服务还会因为其它原因而故障。而要将这些故障控制在一定范用避免雪崩&#xff0c;就要靠线程隔离(舱壁…

jmeter,读取CSV文件数据的循环控制

1、构造csv数据 保存文件时需要注意文件的编码格式 id,name,limit,status,address,start_time 100,小米100,1000,1,某某会展中心101,2023/8/20 14:20 101,小米101,1001,1,某某会展中心102,2023/8/21 14:20 2、在线程组下添加【CSV数据文件设置】元件 3、CSV文件数据的循环控…

IDEA debug窗口左边工具栏隐藏与显示

今天在debug排查代码的时候一不小心点到哪里&#xff0c;结果变成这样 我们可以这样恢复&#xff0c;右键Debug 点击show Toolbar

本地项目添加到gitlab命令操作

gitlab上面创建一个跟项目名同名的文件夹 创建文件夹&#xff0c;填写信息 添加readme文档&#xff0c;先保存下创建的文件夹 回到项目&#xff0c;复制项目的git 地址 然后进入到本地项目的文件夹&#xff0c;如d:/workspace/spring-demo&#xff0c;右键打开git bash弹框 命令…

关于“Python”的核心知识点整理大全22

目录 ​编辑 9.4.2 在一个模块中存储多个类 虽然同一个模块中的类之间应存在某种相关性&#xff0c;但可根据需要在一个模块中存储任意数量的 类。类Battery和ElectricCar都可帮助模拟汽车&#xff0c;因此下面将它们都加入模块car.py中&#xff1a; car.py my_electric_car…

云原生之深入解析Kubernetes本地持久化存储方案OpenEBS LocalPV的最佳实践

一、K8s 本地存储 K8s 支持多达 20 种类型的持久化存储&#xff0c;如常见的 CephFS 、Glusterfs 等&#xff0c;不过这些大都是分布式存储&#xff0c;随着社区的发展&#xff0c;越来越多的用户期望将 K8s 集群中工作节点上挂载的数据盘利用起来&#xff0c;于是就有了 loca…

智能物联网(IoT)VS AI物联网(AIoT)

#IoT# #AIoT# 智能物联网&#xff08;IoT&#xff09;和AI物联网&#xff08;AIoT&#xff09;区别 概念&#xff1a; 物联网&#xff08;IoT&#xff09;&#xff1a;即“万物相连的互联网”&#xff0c;是在互联网基础上延伸和扩展的网络&#xff0c;将各种信息传感设备与网…

最新AI绘画Midjourney绘画提示词Prompt教程

一、Midjourney绘画工具 SparkAi【无需魔法使用】&#xff1a; sparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的…

IDEA设置查看JDK源码

问题 我们在查看JDK源码时&#xff0c;可能会遇到这种情况&#xff0c;步入底层查看JDK源码时&#xff0c;出现一堆var变量&#xff0c;可读性非常之差&#xff0c;例如笔者最近想看到nio包下的SocketChannelImpl的write方法&#xff0c;结果看到这样一番景象&#xff1a; pu…