当前位置: 首页 > news >正文

element el-table表格切换分页保留分页数据+限制多选数量

el-table表格并没有相关的方法来禁用表头里面的多选按钮

在这里插入图片描述

那么我们可以另辟蹊径,来实现相同的多选+切换分页(保留分页数据)+ 限制多选数量的效果

<el-table:data="tableData"style="width: 100%">// 不使用el-talbe自带的多选功能//<el-table-column type="selection" width="55"></el-table-column>//自己单独建一个el-table-column 来设置选中状态<el-table-column fixed width="60"><template slot-scope="scope"><el-checkbox v-model="scope.row.isCheck":disabled="selectable(scope.row)"@change="checkChange($event, scope.$index, scope.row)"></el-checkbox></template></el-table-column><el-table-columnlabel="日期"width="120"><template slot-scope="scope">{{ scope.row.date }}</template></el-table-column>
</el-table>
//在获取表格数据以后 遍历表格,为每行数据添加上 isCheck 属性,并设置默认值false
this.tableData.forEach(item =>{item.isCheck = false;
})

实现多选功能 checkChange

 //事件有三个参数  // val el-checkbox change事件返回的值 代表 选中/不选中// index 当前tableData 所在的行// row 当前tableData 当前行的数据checkChange(val, index, row) {//通过val true/false ;来判断是 选中当前行/取消选中当前行if (val) {//选中 往多选数组里面推送this.multipleSelection.push(row);} else {//取消选中(删除) 拿到当前数据的唯一标识id const { id } = row;let delIndex = this.multipleSelection.findIndex((item) => item.id=== id);//删除 取消选中的数据if (delIndex !== -1) {this.multipleSelection.splice(delIndex, 1);}}//重新设置 表格当前行的多选状态this.$set(this.tableData, index, { ...row, isCheck: !!val });},

实现 限制多选数量的功能 selectable(scope.row)

//我们在最上面的实例中定义了一个 el-checkbox的禁用方法  :disabled="selectable(scope.row)"//限制最多只能选择5个
// 方法返回 true/false 来实现el-checkbox的禁用/选中功能
selectable(row) {//限制多选最多只能选择5个let limitNum = 5let ids = this.multipleSelection.map((item) => item.id);//判断当前行的唯一标识符 id,是否存在于多选数组中if (ids.includes(row.id)) {// 已选择的行,可取消禁用return false;} else if (ids.length >= limitNum  && !ids.includes(row.coilNo)) {// 超过最大选择条数,且当前行未被选中时,禁用return true;} else {// 其他情况下可选 取消禁用return false;}
}

实现切换分页保留分页数据功能

//获取表格数据
getTableData(){//模拟数据获取this.tableData = res.data || []//判断选中数组是否有值 有值(执行回显选中数据功能)if (this.multipleSelection.length > 0) {this.echoMultiple();}
}//回显多选值
echoMultiple() {//增加校验 如果当前tableData没有值 就不回显选中数据if (this.multipleSelection.length === 0 || this.tableData.length === 0) {return;}let ids = this.multipleSelection.map((item) => item.id) || [];this.tableData.forEach((item, index) => {//遍历 tableData数值 找出符合要求的idif (ids.includes(item.id)) {// 为符合回显要求的数据 设置选中状态this.$set(this.tableData, index, { ...item, isCheck: true });}});//避免视图不刷新 强制刷新视图this.$forceUpdate();}

相关文章:

  • GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记
  • React快速入门-跟着AI学习react
  • 二手物品交易小程序的设计
  • leetcode LCR072.x的平方根
  • 优化页面加载时间
  • Attention (注意力机制)
  • 香橙派AIpro实测:YOLOv8便捷检测,算法速度与运行速度结合
  • 前后端分离:四种开发模式与实践指南
  • 微信小程序毕业设计-球馆预约系统项目开发实战(附源码+论文)
  • labview排错
  • 02-部署LVS-DR群集
  • React 打包时如何关闭源代码混淆
  • 图像的反转
  • K8s 集群(kubeadm) CA 证书过期解决方案
  • 【代码随想录_Day24】134. 加油站 135. 分发糖果 860. 柠檬水找零 406. 根据身高重建队列
  • JavaScript 如何正确处理 Unicode 编码问题!
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 30天自制操作系统-2
  • Apache的基本使用
  • Computed property XXX was assigned to but it has no setter
  • CSS实用技巧干货
  • DOM的那些事
  • HashMap ConcurrentHashMap
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • js ES6 求数组的交集,并集,还有差集
  • Just for fun——迅速写完快速排序
  • oldjun 检测网站的经验
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 闭包--闭包之tab栏切换(四)
  • 对象引论
  • 缓存与缓冲
  • 简单实现一个textarea自适应高度
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 通过git安装npm私有模块
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 我感觉这是史上最牛的防sql注入方法类
  • 06-01 点餐小程序前台界面搭建
  • postgresql行列转换函数
  • 湖北分布式智能数据采集方法有哪些?
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • (a /b)*c的值
  • (阿里云万网)-域名注册购买实名流程
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转)四层和七层负载均衡的区别
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net wcf memory gates checking failed
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net程序帮助文档制作
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • [.NET 即时通信SignalR] 认识SignalR (一)