elementui中el-table实现翻页、全选
问题描述
在最近的一个项目中,我需要实现表格的翻页,并且还要实现全选、多选功能
众所周知,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实现翻页、全选相关推荐
- Element-UI中关于table表格的那些骚操作
最近的项目中使用到element-ui组件库,由于做的是后台管理系统,所以经常需要操作表格,编辑样式的过程中遇到一些问题,官网针对table给出了很多的api,自己可以自定义,基本能满足产品需求,但是 ...
- ElementUI中为table增加小计/合计
ElementUI中只有为表格增加一个合计的功能,但是有些时候可能会遇到同时增加小计/合计的功能,可以利用slot='append'去实现多个合计功能. 文章地址: ElementUI中为table增 ...
- element-ui 中的table的列隐藏问题
element-ui 中的table和bootstrap中的table的某些设置还是有一定的差别的.之前用bootstrap做的表格,想要实现简短列和详细列的切换.因为详细列实在有太多列了,拉动滚动条 ...
- 实现分页列表跨页全选
前言 新需求是要支持跨页全选,因为习惯了element的当页全选以及惯性思维,第一步是想到了前端分页,但是这种方法显然是不可取的,因此花了点时间写了个demo分享 因为是个demo,所以就一直按照思路 ...
- jqgrid for asp.net 单页全选记录ID
官网给的例子里单页全选得不到ID,一个一个选能得到,所以我要添加JS方法把rowid存到一个hidden里以便让后台也能收到,使全选时能存储ID. 选中状态的方法为.setSelection(rowi ...
- layui.table(表格)跨页多选
layui版本:2.5.4 使用数据表格时可能会需要在翻页时保留各个页面选中行的信息,效果如下. 效果演示 实现思路 实现思路大致分为以下三步 1.定义两个全局变量用于保存选中行的id,以及当前页所有 ...
- Element UI 多选表格【翻页多选】全能版(含翻页多选数据反显、toggleRowSelection失效的原因解析和解决方案)
效果预览 实现思路 data中定义 selectedList 数组保存选中的数据 在页面初次渲染.翻页.切换每页数据数量等每次重新获取表格数据渲染表格时,都根据 selectedList 勾选表格中已 ...
- easyUI table datagrid 选中取消全选触发事件
业务中可能会需要实时的监听表格中的行勾选事件来实现一些需求,根据 easyUI 绑定table id,datagrid 选中取消全选触发事件. 需要注意的是,将.datagrid方法放在$(funct ...
- elementui中打开html页面,ElementUi中el
现实的场景中很经常遇到表格el-table数据过多,为了更好的用户体验,所以我们需要用到分页,一般分页可以视数据量的大小可分为前端控制和后端控制. 先看下效果(已做脱敏处理) 图1 前端el-tabl ...
- 用Python中BeautifulSoup爬取翻页式网页图片(爬取海贼王漫画)
以爬取海贼王漫画为例 成果图: 话不多逼,开始表演 首先需要的库: import request from bs4 import BeautifulSoup import urllib.request ...
最新文章
- Java项目开发全程实录pdf
- Python date,datetime,time等相关操作总结
- 栈和队列的算法题总结
- (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
- dede config.chche.inc.php,dede/config.php · 辉辉菜/三强源码 - Gitee.com
- 前端学习(652):运算符导读
- java序列化流_java 序列化流与反序列化流
- 《人生七年》启示,穷人买车,富人投资教育
- Excel、CSV文件数据导入MySQL数据库
- 斗鱼+android下载地址,斗鱼下载2021安卓最新版_手机app官方版免费安装下载_豌豆荚...
- .NET的.snk文件使用方法和DLL加密
- V4L2驱动框架详解
- netbeans使用教程_IDE:5个最喜欢的NetBeans功能
- java解析pdf 图片文字_Java 读取PDF中的文本和图片
- 利用Kmeans聚类进行用户分层分析
- 计算机图形物理知识,计算机图形学:虚拟和现实世界的融合
- DXperience的汉化步骤,相当简单
- 【雷达与对抗】【2006.09】多普勒模式匹配对雷达探测性能的改进
- android 4.3刷机包,联想B8080-F官方固件刷机包4.3rom线刷包(Root权限+驱动)
- MacBook 整个配置过程,供新入手MacBook的同学
热门文章
- 2.2Ad Hoc 网络的MAC协议
- RECUR宣布与三丽鸥建立NFT战略合作关系,首次将标志性品牌Hello Kitty引入数字藏品空间
- 微信小程序对接蓝牙设备连接
- 编写 Java 程序用于显示人的姓名和年龄。
- kali开启两张网卡的配置
- 圆度坐标法MATLAB,基于坐标法测量圆度误差数据处理的MATLAB实现
- Java之Spring5:AOP
- AirPlay视频认证测试用例
- 机器学习篇——朴素贝叶斯分类器(1)
- 华硕顽石电脑共享名和计算机名称,华硕笔记本共享WIFI给手机上网功能的方法(图文教程)...