el-table复选框分页记忆
el-table 结合 el-pagination 实现分页后默认是没有复选框记忆功能的,对于这样的需求,无奈又只能硬着头皮上,试了网上的一些方法,没奏效,便自己上了。
简单的用法如下:
<template>
<div class="table-demo">
<el-table
ref="multipleTable"
:data="rowData"
tooltip-effect="dark"
style="width: 100%"
@selection-change="changeFun"
@select="selectMemoryFn"
@select-all="selectAll"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="日期" width="120">
<template slot-scope="{ row }">{{ row.date }}</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="120"></el-table-column>
<el-table-column prop="address" label="地址" show-overflow-tooltip></el-table-column>
</el-table> <el-pagination
layout="prev, pager, next"
:total="total"
:current-page="currentPage"
@current-change="handleCurrentChange"
>
</el-pagination>
</div>
</template>
<script>
import { getAddressList } from '../api/getData'
export default {
data () {
return {
currentPage: ,
pageSize: ,
total: , // 随便定义一个形成分页的数字
rowData: [],
multipleSelection: [], // 选中的数据二维数组
ids: [] // 选中的数据id数组
}
},
methods: {
changeFun (val) { // 保存已选数据id到数组,供后续操作(与分页记忆无关)
this.$nextTick(() => {
let ids = []
this.multipleSelection.forEach(L => L.forEach(M => ids.push(M.id)))
this.ids = ids
})
},
selectAll (selection) { // 全选切换方法
if (selection.length) { // 全选
this.multipleSelection[this.currentPage - ] = selection
} else { // 全不选
this.multipleSelection[this.currentPage - ] = []
}
},
selectMemoryFn (val, row) { // 设置分页记忆二位数组方法
// 注意:val 传过来默认为数组类型 ,row 为 Object(当前选择数据对象)
let currentArr = this.multipleSelection[this.currentPage - ] // 当前分页对应数组
if (!currentArr) {
this.multipleSelection[this.currentPage - ] = val // 不存在这个二维数组,则创建这个二位数组
} else { // 存在
if (val.includes(row)) { // 选中
this.multipleSelection[this.currentPage - ] = val
} else { // 取消
delete currentArr[currentArr.indexOf(row)]
}
}
},
selectMemoriedDataFn () { // 分页记忆自动选中方法
let currentArr = this.multipleSelection[this.currentPage - ] // 当前分页对应被选中数据
if (currentArr && currentArr.length) { // 存在则继续执行
let tempRowsIDs = this.rowData.map(L => L.id) // 当前分页被选中数据的id集合
currentArr.forEach((item, index) => { // 遍历当前分页被选中数据
if (tempRowsIDs.includes(item.id)) { // id匹配上,则选中
this.$refs.multipleTable.toggleRowSelection(this.rowData[tempRowsIDs.indexOf(item.id)])
}
})
}
},
handleCurrentChange (val) { // 分页切换,重新加载数据
this.currentPage = val
this.init()
},
async init () { // 初始化获取数据
let res = await getAddressList({ page: this.currentPage })
this.rowData = res.rows
}
},
watch: {
rowData (oldVal, newVal) { // 监听数据变化,然后执行分页记忆自动选中回调
this.$nextTick(() => {
this.selectMemoriedDataFn()
})
}
},
created () {
this.init()
}
}
</script>
解决思路:
1. 创建一个二维数组对应每个分页,每次选中、取消的回调里去判断操作数据是否在对应二位数组元素里,然后再进行添加或删除。
2. 监听每次表格数据变化,然后去执行记忆选中回调。(记忆回调里绕了一个弯,通过id去判断二维数组存在性,多次循环,这一点有待优化)
如果有更好的解决办法,欢迎留言探讨!
el-table复选框分页记忆的更多相关文章
- bootstrap table 复选框选中后,翻页不影响已选中的复选框
使用的 jquery版本为 2.1.1 在项目中发现bootstrap table的复选框选中后,翻页操作会导致上一页选中的丢失,api中的 bootstrapTable('getSelections ...
- bootstrap table 复选框使用
var columns = [ { field : 'checked', checkbox: true, align: 'center', valign: 'middle', formatter:fu ...
- easyUI 创建有复选框的table.datagrid
table : function(data){ pt.v.table.datagrid({ // singleSelect:true, height:295, columns:[[ {field:'x ...
- springMVC 复选框带有选择项记忆功能的处理
前言:由于jsp管理页面经常会遇到复选框提交到JAVA后台,后台处理逻辑完成后又返回到jsp页面,此时需要记住jsp页面提交时复选框的选择状态,故编写此功能! 一.复选框的初始化 1.1.jsp页面 ...
- 关于MUI v0.18.0版本 Table组件里的复选框不能选的解决方案
前段时间在用MUI的时候,Table组件出现复选框不能选的bug(描述: 点击复选框,点击事件会触发,复选框勾选状态无变化). 解决方法: 用CheckBox组件代替Table组件自带的复选框. 解决 ...
- DEV控件的分页控件,实现勾选复选框
/// <summary> /// 单元格的点击事件 /// </summary> /// <param name="sender"></ ...
- Vue el 使用el-checkbox-group复选框进行单选框操作
el-checkbox-group这个组件与其他复选框不一样,我当初也是半天不知道怎么操作 页面使用v-model绑定 size就是等比例缩小放大,v-ror循环应该看的懂.重要的是@chage到我们 ...
- angularJS批量删除 品优购删除品牌(通用复选框批量选中删除解决思路)
思路: 一步:在点击复选框时维护变量数组 在js中定义一个数组变量, 给复选框添加点击动作, 在动作中判断当前复选框是否为选中状态(即点击后复选框的是否选中状态), 若为选中状态,则向数组中添加选中的 ...
- js实现复选框的操作-------Day41
不知道之前的一篇为什么一直处于审核阶段.难道有哪个词语是敏感词被河蟹了? 无论了,又一次写了这篇,也算是加深记忆吧. 首先要写的是今天在进行表格数据操作时用到的对复选框checkbox的全选和全不选, ...
随机推荐
- ARM64 Linux kernel virtual address space
墙外通道:http://thinkiii.blogspot.com/2014/02/arm64-linux-kernel-virtual-address-space.html Now let's ta ...
- 深入学习使用ocr算法识别图片中文字的方法
公司有个需求,简单点说需要从一张图片中识别出中文,通过python来实现,当然其他程序也行,只要能实现,而小编主要学习python,所以就提了python.一个小白在网上遨游了一天,终于找到一丝丝思绪 ...
- [转]Angular项目目录结构详解
本文转自:https://blog.csdn.net/yuzhiqiang_1993/article/details/71191873 版权声明:本文为博主原创文章,转载请注明地址.如果文中有什么纰漏 ...
- 数据库内连接GROUP BY查询外键表数据行的总数
最近看了看SQL,刚好遇到这个问题. INNER JOIN [外键表] ON [主键表] 内链接,用 GROUP BY 分组外键数据,COUNT(*)计算该外键数据总行数,最后用 ORDER BY 排 ...
- Java使用foreach语句对数组成员遍历输出
/** * 本程序使用foreach语句对数组成员进行遍历输出 * @author Lei * @version 2018-7-23 */ public class ForeachDemo { pub ...
- JavaScript初学者必看“new”
译者按: 本文简单的介绍了new, 更多的是介绍原型(prototype),值得一读. 原文: JavaScript For Beginners: the 'new' operator 译者: Fun ...
- Android系统常用URI
android系统常用URI android系统管理联系人的URI如下: ContactsContract.Contacts.CONTENT_URI 管理联系人的Uri ContactsContrac ...
- csharp:FTP Client Library using FtpWebRequest or Sockets
https://netftp.codeplex.com/SourceControl/latest http://ftplib.codeplex.com/ https://www.codeproject ...
- Immuable详解以及在React中的实战
转载自:https://zhuanlan.zhihu.com/p/20295971, 今天看到这篇文章后情不自禁的转载过来了,我的天老爷,我看到后直接菊花一紧,这写的太好了,直接写进我心坎里了,我必须 ...
- CSS水平居中的三种方法
CSS中经常会用到元素居中,那么今天我为大家分享几种水平居中的方法,下面代码都可以达到同样的居中效果,来不及解释了,快上马(码): 一.margin : 0 auto; <head> &l ...