在vue和element-ui的table中实现分页复选功能


Posted in Javascript onDecember 04, 2019

背景

后台管理系统中,使用表格展示数据时,可能的需求是多项选择然后进行批量操作,也期望能翻页多选。

实现

在vue和element-ui的table中实现分页复选功能 

页面结构如下

<el-table
 class="table"
 :data="tableData"
 border
 style="width: 100%"
 @selection-change="handleSelectionChange"
 ref="asTable"
>
 <el-table-column
 width="50"
 type="selection"
 fixed="left"
 >
 </el-table-column>
 <el-table-column
 prop="id"
 label="ID"
 >
 </el-table-column>
 <el-table-column
 prop="name"
 label="名字"
 >
 </el-table-column>

 <el-table-column
 label="操作"
 width="100"
 >
 <template slot-scope="scope">
  <el-button type="primary" plain size="small" @click="handleEdit(scope.row)" >编辑</el-button>
 </template>
 </el-table-column>
</el-table>
<el-pagination
 background
 @current-change="handleCurrentChange"
 :current-page.sync="pagination.currentPage"
 :page-size="pagination.size"
 layout="total, prev, pager, next, jumper"
 :total="pagination.total"
 slot="pagination"
>
</el-pagination>

模拟数据实现分页

data () {
 return {
 tableData: [],
 multipleSelection: [],
 pagination: {
  currentPage: 1,
  size: 10,
  total: 1000
 }
 }
},
beforeMount () {
 this.fetchData()
},
methods: {
 fetchData () {
 this.tableData = []
 let start = (this.pagination.currentPage - 1) * this.pagination.size
 let end = this.pagination.currentPage * this.pagination.size
 setTimeout(_ => {
  for (let i = start; i < end; i++) {
  this.tableData.push({
   id: i,
   name: `王${i}兰`
  })
  }
 }
 },
 handleCurrentChange () {
 this.fetchData()
 },
 handleSelectionChange (val) {
 this.multipleSelection = val
 },
}

展示已选择项

<div class="result">
 已选:{{ allMultipleSelection }}
</div>
allMultipleSelection: [],

在复选事件中对所选项进行存储

主要思路就是:

  • 将当前页已选数据放入所有已选项
  • 将所有已选项数据中当前页没选择的项移除
handleSelectionChange (val) {
 this.multipleSelection = val
 // @tip 实现分页复选
 console.log(val, 'selection')
 setTimeout(_ => {
 this.resolveAllSelection()
 }, 50)
},
resolveAllSelection () {
 let currentPageData = this.tableData.map(item => item[this.uniqueKey]) // 当前页所有数据
 let currentPageSelected = this.multipleSelection.map(item => item[this.uniqueKey]) // 当前页已选数据
 let currentPageNotSelected = currentPageData.filter(item => !currentPageSelected.includes(item)) // 当前页未选数据
 // 将当前页已选数据放入所有已选项
 currentPageSelected.forEach(item => {
 if (!this.allMultipleSelection.includes(item)) {
  this.allMultipleSelection.push(item)
 }
 })
 // 将所有已选项数据中当前页没选择的项移除
 currentPageNotSelected.forEach(item => {
 let idx = this.allMultipleSelection.indexOf(item)
 if (idx > -1) {
  this.allMultipleSelection.splice(idx, 1)
 }
 })
 console.log(this.allMultipleSelection, 'all')
},

此时还需要在切换页面时将之间选择项进行重新选中,即遍历当前页所有数据如果存在于所有已选项中,则将其置为已选择。

fetchData () {
 // ...
 setTimeout(_ => {
 // ...
 // @tip 实现分页复选
 setTimeout(_ => {
  this.setSelectedRow()
 }, 50)
 }, 200)
},
setSelectedRow () {
 // 设置当前页已选项
 this.tableData.forEach(item => {
 if (this.allMultipleSelection.includes(item[this.uniqueKey])) {
  this.$refs.asTable.toggleRowSelection(item, true)
  console.log(item[this.uniqueKey], 'set')
 }
 })
},

在vue和element-ui的table中实现分页复选功能 

以上实现了分页复选功能。

所有代码存放在 @careteen/lan-vue

查看DEMO

clone仓库并引入依赖

git clone git@github.com:careteenL/lan-vue.git
npm install
npm run serve

浏览器打开 http://localhost:8080/#/examples/pagingCheck 即可看到效果

总结

以上所述是小编给大家介绍的在vue和element-ui的table中实现分页复选功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js计算页面刷新的次数
Jul 20 Javascript
jQuery 相关控件的事件操作分解
Aug 03 Javascript
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
js实现鼠标触发图片抖动效果的方法
Feb 27 Javascript
深入理解JS正则表达式---分组
Jul 18 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
Vue 理解之白话 getter/setter详解
Apr 16 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
Apr 26 Javascript
VSCode搭建Vue项目的方法
Apr 30 Javascript
JavaScript Window浏览器对象模型原理解析
May 30 Javascript
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
vue项目中极验验证的使用代码示例
Dec 03 #Javascript
jQuery轮播图功能制作方法详解
Dec 03 #jQuery
JS实现的雪花飘落特效示例
Dec 03 #Javascript
vue中实现高德定位功能
Dec 03 #Javascript
node静态服务器实现静态读取文件或文件夹
Dec 03 #Javascript
js实现时分秒倒计时
Dec 03 #Javascript
Vue实现验证码功能
Dec 03 #Javascript
You might like
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
Dojo 学习要点
2010/09/03 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python 如何引入协程和原理分析
2020/11/30 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
工商管理实习生自我鉴定范文
2013/12/18 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
护理工作感言
2014/01/16 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
本科生自荐信
2014/06/18 职场文书
安全生产年活动总结
2014/08/29 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
八一建军节慰问信
2015/02/14 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
python源码剖析之PyObject详解
2021/05/18 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python