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复选框分页记忆的更多相关文章

  1. bootstrap table 复选框选中后,翻页不影响已选中的复选框

    使用的 jquery版本为 2.1.1 在项目中发现bootstrap table的复选框选中后,翻页操作会导致上一页选中的丢失,api中的 bootstrapTable('getSelections ...

  2. bootstrap table 复选框使用

    var columns = [ { field : 'checked', checkbox: true, align: 'center', valign: 'middle', formatter:fu ...

  3. easyUI 创建有复选框的table.datagrid

    table : function(data){ pt.v.table.datagrid({ // singleSelect:true, height:295, columns:[[ {field:'x ...

  4. springMVC 复选框带有选择项记忆功能的处理

    前言:由于jsp管理页面经常会遇到复选框提交到JAVA后台,后台处理逻辑完成后又返回到jsp页面,此时需要记住jsp页面提交时复选框的选择状态,故编写此功能! 一.复选框的初始化 1.1.jsp页面 ...

  5. 关于MUI v0.18.0版本 Table组件里的复选框不能选的解决方案

    前段时间在用MUI的时候,Table组件出现复选框不能选的bug(描述: 点击复选框,点击事件会触发,复选框勾选状态无变化). 解决方法: 用CheckBox组件代替Table组件自带的复选框. 解决 ...

  6. DEV控件的分页控件,实现勾选复选框

    /// <summary> /// 单元格的点击事件 /// </summary> /// <param name="sender"></ ...

  7. Vue el 使用el-checkbox-group复选框进行单选框操作

    el-checkbox-group这个组件与其他复选框不一样,我当初也是半天不知道怎么操作 页面使用v-model绑定 size就是等比例缩小放大,v-ror循环应该看的懂.重要的是@chage到我们 ...

  8. angularJS批量删除 品优购删除品牌(通用复选框批量选中删除解决思路)

    思路: 一步:在点击复选框时维护变量数组 在js中定义一个数组变量, 给复选框添加点击动作, 在动作中判断当前复选框是否为选中状态(即点击后复选框的是否选中状态), 若为选中状态,则向数组中添加选中的 ...

  9. js实现复选框的操作-------Day41

    不知道之前的一篇为什么一直处于审核阶段.难道有哪个词语是敏感词被河蟹了? 无论了,又一次写了这篇,也算是加深记忆吧. 首先要写的是今天在进行表格数据操作时用到的对复选框checkbox的全选和全不选, ...

随机推荐

  1. git第七节---git merge和git rebase

    # git merge和git rebase 都可以进行分支合并 #git merge 合并后保留记录两个分支的记录 #git rebase合并后会展示成一个分支的记录,另一个分支的提交实际生成了一个 ...

  2. netty源码解解析(4.0)-6 线程模型-IO线程EventLoopGroup和NIO实现(一)

    接口定义 io.netty.channel.EventLoopGroup extends EventExecutorGroup 方法 说明 ChannelFuture register(Channel ...

  3. ElasticSearch聚合分析

    聚合用于分析查询结果集的统计指标,我们以观看日志分析为例,介绍各种常用的ElasticSearch聚合操作. 目录: 查询用户观看视频数和观看时长 聚合分页器 查询视频uv 单个视频uv 批量查询视频 ...

  4. MySQL事务笔记

    1.结束事务的方法用什么? 2.事务的最终形态是什么? commit 提交 rollback 回滚 3.事务的四大特征? ⑴ 原子性 一个事务是最小的工作单元,事务包含的所有操作要么全部成功,要么全部 ...

  5. SQL查询语句如何能够让指定的记录排在最后

    方法如下:select * from <表名> order by case when <条件> then 1 else 0 end asc 举例:把threads表中列id值小 ...

  6. ubuntu安装ftp server服务

    原文地址: https://jingyan.baidu.com/article/7908e85c988b23af481ad2ae.html 首先,更新软件源,保证源是最新的,这样有利于下面在线通过ap ...

  7. 微信小程序日历课表

    最近项目中使用到了日历,在网上找了一些参考,自己改改,先看效果图 wxml <view class="date"> <image class="dire ...

  8. 前端整理——Vue部分

    (1)Vue的生命周期 1)创建vue实例,初始化生命周期钩子函数 2)数据检测及方法和计算属性代理.在数据检测和初始化数据之前调用beforeCreated(),这时还获取不到props或者data ...

  9. 2017-12-21 FriceEngine试用与API中文化

    早先就听闻FriceEngine已有中文接口版本, 可惜没有机会尝试. 经原作者 @大笨蛋千里冰封 (Github账号 @ice1000 )建议, 在FriceEngine的DSL封装的接口基础上, ...

  10. Tars --- Hello World

    服务端开发 1,创建一个 webapp maven 项目,pom.xml 导入依赖 <dependency> <groupId>com.tencent.tars</gro ...