首页 > 其他分享 >多选表格实现思路

多选表格实现思路

时间:2023-07-11 13:57:51浏览次数:26  
标签:el selection 多选 表格 勾选 table 思路 row

表格多选功能的实现参考官方文档即可,下面给出代码:

手动添加一个el-table-column,设type属性为selection,使得表格出现复选框

  <el-table-column type="selection" width="50" align="center" />

image-20230421150146888

然后给 el-table 添加 selection-change 事件,该事件接收一个参数 selections,表示当前选中的行所组成的数组。

<el-table :data="userList" @selection-change="handleSelectionChange">

这样就实现了一个基本的多选表格了。

分页多选-状态保留

有时候我们的表格数据会不止一页,如果想要保留上一页选中的数据,可以通过 row-keyreserve-selection 这两个属性来实现,首先是给 el-table 添加 row-key 属性,该属性可以接受一个Function做值,该Function接受该行的数据row做为参数,且需要返回一个唯一的key。

<el-table :row-key="getRowKey" :data="userList" @selection-change="handleSelectionChange" >
getRowKey(row) {  return row.userId  }

然后给 type="selection"el-table-column 添加 reserve-selection 属性

<el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>

多选表格回显

想要进行选中的数据回显,要使用的是表格组件的 toggleRowSelection 方法。

第一步,给 el-table 添加 ref 使得我们可以获取到DOM,从而使用它上面的方法

<el-table :row-key="getRowKey" :data="userList" @selection-change="handleSelectionChange" ref="multipleTable">

然后,我们应该是存在一个数组 selectedList 里面存放着我们已经勾选的数据(或者说是我们需要回显的数据),然后我们会请求接口,接口返回表格的数据 dataList 给我们,接下来我们对 dataList 进行遍历,同时判断遍历到的当前元素是否存在于 selectedList(意思就是判断当前元素是否需要被勾选起来),如果是需要被勾选,我们就使用 toggleRowSelection 来改变勾选状态

this.dataList = response.rows // 请求返回的数据
const userIds = this.selectedList.map(i => i.userId) // 简化判断操作
// 遍历返回的数据
this.dataList.forEach(row => {
    if (userIds.includes(row.userId)) {
      this.$refs.multipleTable.toggleRowSelection(row, true)
    }
})

注意,因为我们的表格显示的是请求回来的表格数据 dataList ,所以放在 toggleRowSelection 中的行元素应该是 dataList 中的元素,而不是 selectedList 的。

注意踩坑

存在这样一种场景,我们的表格是在一个弹出框里,当我们点击外部某个按钮后,弹出框显示表格,我们执行勾选操作,假设本次勾选了10行数据,然后关闭弹出框,重新打开弹出框,然后不进行勾选操作,然后点击确定,会发现 selection-change 事件的 selection 数组中有20个元素。这是不对的,应该只有刚刚勾选的那10个元素才对。

www.alltoall.net_dasdsdfsdfsdfsdfs_xTwlPsamXd

为什么会出现这个问题呢,我的猜想是,el-table 中存在某个变量x存放着我们多选时选中的数据,当我们第二次打开弹出框的时候,用的还是同一个 el-table (因为没有清除掉这个DOM元素),所以这个x变量中还存放着我们上次选中的值,然后我们为了回显数据又通过代码 toggleRowSelection 把数据勾选了一遍,所以这个x变量中就存在20个元素了。

因此我们要注意销毁掉 el-table 元素,比如上面的场景中,我通过 el-dialogdestroy-on-close 来实现每次关闭弹出框的时候都清空掉里面的元素,从而解决了这个问题。

标签:el,selection,多选,表格,勾选,table,思路,row
From: https://www.cnblogs.com/maccx/p/17544427.html

相关文章

  • 单选表格实现思路
    element单选表格的实现,主要依靠elTable组件的select事件,假设存在如下表格:以上面的表格为例子,可以通过如下步骤实现单选表格。data我们需要一个状态tableData用于存放表格的数据,还需要一个状态selectedRow用于存放当前勾选的行是数据。两个状态的默认值如下:data(){ re......
  • mui用列表实现表格的增删改查
    我的需求是实现表格的增删改查,原需求是有两列的表,有三列的表,因为移动端的表格操作不方便,所以想采用以前常用的列表形式来实现。先看画面效果。 一,先用静态html代码,实现画面呈现的样式,采用列表嵌套表格的方法,表格可以约束列宽。<divclass="mui-table"><divclass="mui-......
  • 行行AI人才直播第9期:销氪副总裁陈摩西《AI在企业服务领域的商业化应用设计思路》
    人工智能 (AI) 正在颠覆几乎所有行业,并正在改变我们开展业务的方式。近年来,SaaS 行业一直是受影响最大的行业之一,人工智能在其指数级增长中发挥着至关重要的作用。随着AI技术逐渐落地和市场认可度的不断提高,越来越多知名的互联网公司,甚至传统行业公司也都在设立自己的AILab......
  • 跨平台轻量级RTSP服务模块设计思路及实现探讨
    技术背景为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,我们发布了轻量级RTSP服务模块,轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本地的音视频数据(如摄像头、麦克风),编码后,汇聚到内置RTSP服务,对外提供可供拉流的RTSP......
  • 搜索功能-实现思路
    四种搜索词搜索热词热词是一种由运维提前维护好的搜索词,会展示在搜索界面的搜索框下,用户可以点击直接搜索该热词的相关结果。运维维护好后,会双写到DB和Redis。接口查询时,会保存到本地缓存,有效期5分钟,所以维护了一个热词,需要五分钟后才能看到。热词会被视为keyword。联想词联......
  • Camstar表格自定义写js,实现单元格合并。
     效果: ......
  • [数据分析与可视化] 基于plottable库绘制精美表格
    plottable是一个Python库,用于在matplotlib中绘制精美定制的图形表格。plottable的官方仓库地址为:plottable。本文主要参考其官方文档,plottable的官方文档地址为:plottable-doc。plottable安装命令如下:pipinstallplottable本文所有代码见:Python-Study-Notes#jupyternoteboo......
  • 明明是张表格脸,怎么也长出了图片?(Excel批量处理图片合集)
    图片来源为函数类:Excel批量插入图片制图片的下拉选项图片就是图片类:批量插入图片把图片用在了数据透视表里只要是单元格对象的图片,不问出处:当函数遇上图片......
  • SSO单点登录基本概念实现思路以及小的实例详解
    一、什么是单点登录SSO(SingleSign-On)SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。二、单点登录解决了什么问题解决了用户只需要登录一......
  • 利用xlsx库导出页面表格为xlsx文件
    html<el-tableid="table"></el-table>jsimport*asXLSXfrom'xlsx'/** *导出表格为xlsx文件 *@param{string}id表格dom的id*/asyncfunctionexportTable(id,fileName){letwb=XLSX.utils.table_to_book(document.getEleme......