问题描述

在最近的一个项目中,我需要实现表格的翻页,并且还要实现全选、多选功能

众所周知,el-checkbox默认样式不好改,所以在这里我没有用elementui中的多选框,用的是<input type="checkbox">,这样样式是好修改了,但是实现全选就得靠手写了

解决思路

第一步很简单,在<el-table>中加入多选框

<el-table-column width="75">//表头的全选框<template slot="header" slot-scope="slot"><input name="selectAll" type="checkbox"/></template>//input多选框<template slot-scope="scope"><input type="checkbox" class="checkBox"></template>
</el-table-column>

接下来就是我在实现需求时遇到的各种问题了
question1:表格获取后台数据的方法是分页查询,翻页的时候传给后台当前页码currentPage和每页的大小pageSize,前台获取到数据后重新渲染页面,也就是说每次翻页页面都会重新渲染,前一页勾选了的多选框在翻页之后再翻回去就消失了,那么要怎样才能记住每一页多选框的选择情况呢?
answer1:给input框动态绑定类名用来区分这个input框是哪一页的input框;给每行数据添加一个isSelected属性并用v-model绑定,用来记录选择的情况;绑定一个函数handleDelete,勾选、取消勾选时触发;设置delData数组,数组中保存选中的数据id

<input :class="`chooseInfo${currentPage}`" type="checkbox" class="checkBox" v-model="scope.row.isSelected" @click.stop="handleDelete(scope)">
   handleDelete(data){var that = thissetTimeout( function() {//勾选时把该行数据的id存入数组if(data.row.isSelected == true){that.delData.push(data.row.id)}else if(data.row.isSelected == false){//取消勾选时,把该行数据的id从数组中删除for(let i =0; i < that.delData.length; i++){if(that.delData[i] === data.row.id){that.delData.splice(i,1)}}}console.log(that.delData)}, 1000);},

在渲染每一页数据之前,将获取到的表格数据中每一行的id和delData数组中的id做比较,如果delData中存入了该行的id,则该行的isSelected 置为true

 for(let i = 0; i < this.tableData.length; i++){for(let j = 0; j < this.delData.length; j++){if(this.tableData[i].id === this.delData[j]){this.tableData[i].isSelected = truebreak;}else if(j === this.delData.length - 1) {this.tableData[i].isSelected = false}}console.log(this.delData)console.log(this.tableData[i].isSelected)}

以上,翻页时多选框的选择记录就能够被保存啦!
question2:如何实现全选,实现目标:选中全选框只会勾上当前页的所有多选框,其他页不受影响
answer2:全选框绑定v-model="allSelected[currentPage]",绑定函数@click="selectAllUsers()"

 <input name="selectAll" type="checkbox" v-model="allSelected[currentPage]" @click="selectAllUsers()"/>
 async selectAllUsers(){  //全选await this.judgeSelect()},judgeSelect(){var that = thissetTimeout( function() {if (that.allSelected[that.currentPage] === true) {//                        $('.chooseInfo' + that.currentPage).attr("checked","true")for(let i = 0; i < that.tableData.length; i++){that.tableData[i].isSelected = true
//                            that.$forceUpdate();that.$set(that.tableData,i,that.tableData[i])}for(let i = 0; i < that.tableData.length; i ++){//                            判断是否已存在于需要删除的数组中if(that.delData.length != 0){for(let j = 0 ; j < that.delData.length; j++){if(that.delData[j] === that.tableData[i].id)breakelse if(j === that.delData.length-1)that.delData.push(that.tableData[i].id)}}else{that.delData.push(that.tableData[i].id)}}} else if (that.allSelected[that.currentPage] === false){//                        $('.chooseInfo' + that.currentPage).removeAttr("checked");for(let i = 0; i < that.tableData.length; i++){that.tableData[i].isSelected = falsethat.$set(that.tableData,i,that.tableData[i])}for(let i = 0; i < that.tableData.length; i ++){for(let j = 0 ; j < that.delData.length; j ++){if(that.delData[j] === that.tableData[i].id){that.delData.splice(j,1)}}}}}, 100);},

在获取数据接口的函数中,加上:

if(this.allSelected.length === 0)
{for(let i = 1 ; i <= this.totalPage; i++){this.allSelected[i] = false}
}

elementui中el-table实现翻页、全选相关推荐

  1. Element-UI中关于table表格的那些骚操作

    最近的项目中使用到element-ui组件库,由于做的是后台管理系统,所以经常需要操作表格,编辑样式的过程中遇到一些问题,官网针对table给出了很多的api,自己可以自定义,基本能满足产品需求,但是 ...

  2. ElementUI中为table增加小计/合计

    ElementUI中只有为表格增加一个合计的功能,但是有些时候可能会遇到同时增加小计/合计的功能,可以利用slot='append'去实现多个合计功能. 文章地址: ElementUI中为table增 ...

  3. element-ui 中的table的列隐藏问题

    element-ui 中的table和bootstrap中的table的某些设置还是有一定的差别的.之前用bootstrap做的表格,想要实现简短列和详细列的切换.因为详细列实在有太多列了,拉动滚动条 ...

  4. 实现分页列表跨页全选

    前言 新需求是要支持跨页全选,因为习惯了element的当页全选以及惯性思维,第一步是想到了前端分页,但是这种方法显然是不可取的,因此花了点时间写了个demo分享 因为是个demo,所以就一直按照思路 ...

  5. jqgrid for asp.net 单页全选记录ID

    官网给的例子里单页全选得不到ID,一个一个选能得到,所以我要添加JS方法把rowid存到一个hidden里以便让后台也能收到,使全选时能存储ID. 选中状态的方法为.setSelection(rowi ...

  6. layui.table(表格)跨页多选

    layui版本:2.5.4 使用数据表格时可能会需要在翻页时保留各个页面选中行的信息,效果如下. 效果演示 实现思路 实现思路大致分为以下三步 1.定义两个全局变量用于保存选中行的id,以及当前页所有 ...

  7. Element UI 多选表格【翻页多选】全能版(含翻页多选数据反显、toggleRowSelection失效的原因解析和解决方案)

    效果预览 实现思路 data中定义 selectedList 数组保存选中的数据 在页面初次渲染.翻页.切换每页数据数量等每次重新获取表格数据渲染表格时,都根据 selectedList 勾选表格中已 ...

  8. easyUI table datagrid 选中取消全选触发事件

    业务中可能会需要实时的监听表格中的行勾选事件来实现一些需求,根据 easyUI 绑定table id,datagrid 选中取消全选触发事件. 需要注意的是,将.datagrid方法放在$(funct ...

  9. elementui中打开html页面,ElementUi中el

    现实的场景中很经常遇到表格el-table数据过多,为了更好的用户体验,所以我们需要用到分页,一般分页可以视数据量的大小可分为前端控制和后端控制. 先看下效果(已做脱敏处理) 图1 前端el-tabl ...

  10. 用Python中BeautifulSoup爬取翻页式网页图片(爬取海贼王漫画)

    以爬取海贼王漫画为例 成果图: 话不多逼,开始表演 首先需要的库: import request from bs4 import BeautifulSoup import urllib.request ...

最新文章

  1. Java项目开发全程实录pdf
  2. Python date,datetime,time等相关操作总结
  3. 栈和队列的算法题总结
  4. (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
  5. dede config.chche.inc.php,dede/config.php · 辉辉菜/三强源码 - Gitee.com
  6. 前端学习(652):运算符导读
  7. java序列化流_java 序列化流与反序列化流
  8. 《人生七年》启示,穷人买车,富人投资教育
  9. Excel、CSV文件数据导入MySQL数据库
  10. 斗鱼+android下载地址,斗鱼下载2021安卓最新版_手机app官方版免费安装下载_豌豆荚...
  11. .NET的.snk文件使用方法和DLL加密
  12. V4L2驱动框架详解
  13. netbeans使用教程_IDE:5个最喜欢的NetBeans功能
  14. java解析pdf 图片文字_Java 读取PDF中的文本和图片
  15. 利用Kmeans聚类进行用户分层分析
  16. 计算机图形物理知识,计算机图形学:虚拟和现实世界的融合
  17. DXperience的汉化步骤,相当简单
  18. 【雷达与对抗】【2006.09】多普勒模式匹配对雷达探测性能的改进
  19. android 4.3刷机包,联想B8080-F官方固件刷机包4.3rom线刷包(Root权限+驱动)
  20. MacBook 整个配置过程,供新入手MacBook的同学

热门文章

  1. 2.2Ad Hoc 网络的MAC协议
  2. RECUR宣布与三丽鸥建立NFT战略合作关系,首次将标志性品牌Hello Kitty引入数字藏品空间
  3. 微信小程序对接蓝牙设备连接
  4. 编写 Java 程序用于显示人的姓名和年龄。
  5. kali开启两张网卡的配置
  6. 圆度坐标法MATLAB,基于坐标法测量圆度误差数据处理的MATLAB实现
  7. Java之Spring5:AOP
  8. AirPlay视频认证测试用例
  9. 机器学习篇——朴素贝叶斯分类器(1)
  10. 华硕顽石电脑共享名和计算机名称,华硕笔记本共享WIFI给手机上网功能的方法(图文教程)...