element ui分页多选,翻页记忆的实例


Posted in Javascript onSeptember 03, 2019

先说需求:实时记录当前选中的分页中的列表,分页保存数据,然后在用选中的数据进行某些操作;PS:左下角的数字为记录的当前选中的列表的和

element ui分页多选,翻页记忆的实例

直接上可用的代码,前提已配置好各种环境

HTML部分

<!--table组件需要使用ref="table"-->
<template>
 <div>
 <el-table :data="tableData" ref="table" stripe style="width: 100%" @selection-change="handleSelectionChange">
  <el-table-column type="selection" width="55"></el-table-column>
  <el-table-column prop="name" label="商品名称"></el-table-column>
  <el-table-column prop="barcode" label="商品编码"></el-table-column>
  <el-table-column prop="quantity" label="区域总库存"></el-table-column>
 </el-table>
 <div class="block" v-show="page.pageTotal>10">
  <el-pagination @current-change="handleCurrentChange" :current-page.sync="page.currentPage" :page-size="page.pnum" layout="total, prev, pager, next , jumper" :total="page.pageTotal">
  </el-pagination>
 </div>
 <div>
  {{multipleSelectionAll.length}}
 </div>
 </div>
</template>

JS部分

export default {
 data(){
  return {
  tableData: [], // 表格数据 
  multipleSelectionAll:[],//所有选中的数据包含跨页数据
  multipleSelection:[],// 当前页选中的数据
  idKey: 'barcode', // 标识列表数据中每一行的唯一键的名称
  page:{
   //每页数据量
   pnum:10,
   //数据总数
   pageTotal:0,
   //当前页,从1开始
   currentPage:1,
  }
  }
 },
 methods: {
  handleCurrentChange(){
  this.changePageCoreRecordData();
  if(!this.$isNull(this.page.pageTotal)) this.getGoodsList();
  },
  handleSelectionChange (val) {
  this.multipleSelection = val;
  //实时记录选中的数据
  setTimeout(()=>{
   this.changePageCoreRecordData();
  }, 50)
  },
  setSelectRow() {
  if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
   return;
  }
  // 标识当前行的唯一键的名称
  let idKey = this.idKey;
  let selectAllIds = [];
  let that = this;
  this.multipleSelectionAll.forEach(row=>{
   selectAllIds.push(row[idKey]);
  })
  this.$refs.table.clearSelection();
  for(var i = 0; i < this.tableData.length; i++) {   
   if (selectAllIds.indexOf(this.tableData[i][idKey]) >= 0) {
   // 设置选中,记住table组件需要使用ref="table"
   this.$refs.table.toggleRowSelection(this.tableData[i], true);
   }
  }
  },
  // 记忆选择核心方法
  changePageCoreRecordData () {
  // 标识当前行的唯一键的名称
  let idKey = this.idKey;
  let that = this;
  // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
  if (this.multipleSelectionAll.length <= 0) {
   this.multipleSelectionAll = this.multipleSelection;
   return;
  }
  // 总选择里面的key集合
  let selectAllIds = [];
  this.multipleSelectionAll.forEach(row=>{
   selectAllIds.push(row[idKey]);
  })
  let selectIds = []
  // 获取当前页选中的id
  this.multipleSelection.forEach(row=>{
   selectIds.push(row[idKey]);
   // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
   if (selectAllIds.indexOf(row[idKey]) < 0) {
   that.multipleSelectionAll.push(row);
   }
  })
  let noSelectIds = [];
  // 得到当前页没有选中的id
  this.tableData.forEach(row=>{
   if (selectIds.indexOf(row[idKey]) < 0) {
   noSelectIds.push(row[idKey]);
   }
  })
  noSelectIds.forEach(id=>{
   if (selectAllIds.indexOf(id) >= 0) {
   for(let i = 0; i< that.multipleSelectionAll.length; i ++) {
    if (that.multipleSelectionAll[i][idKey] == id) {
    // 如果总选择中有未被选中的,那么就删除这条
    that.multipleSelectionAll.splice(i, 1);
    break;
    }
   }
   }
  })
  },
  //请求接口部分
  getGoodsList(){
  let data = {};
  data['page'] = this.page.currentPage;
  data['pnum'] = this.page.pnum;
  this.$ajax({
   url:'goods/list',
   data:data
  }).then(val => {
   this.tableData = val.data.rows ? val.data.rows : [];
   this.page = {
   pnum:10,
   pageTotal:val.data.total,
   currentPage:val.data.page,
   };
   setTimeout(()=>{
   this.setSelectRow();
   }, 50)
  })
  }
 },
 created () {
  this.getGoodsList()
 }
 }

代码可直接粘贴到项目中使用,亲测可用,傻瓜式代码

以上这篇element ui分页多选,翻页记忆的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Firefox和IE浏览器兼容JS脚本写法小结
Jul 07 Javascript
JS在IE和FireFox之间常用函数的区别小结
Mar 12 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
js编写贪吃蛇的小游戏
Aug 24 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
Dec 26 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
vue与bootstrap实现简单用户信息添加删除功能
Feb 15 Javascript
在Vue环境下利用worker运行interval计时器的步骤
Aug 01 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 Javascript
JavaScript创建、读取和删除cookie
Sep 03 #Javascript
利用d3.js实现蜂巢图表带动画效果
Sep 03 #Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 #Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 #Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
Sep 02 #Javascript
layui表格分页 记录勾选的实例
Sep 02 #Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 #Javascript
You might like
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
25岁生日感言
2014/01/13 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书