在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 相关文章推荐
JavaScript 页面坐标相关知识整理
Jan 09 Javascript
JavaScript在多浏览器下for循环的使用方法
Nov 07 Javascript
javascript中比较字符串是否相等的方法
Jul 23 Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 Javascript
jQuery实现验证年龄简单思路
Feb 24 Javascript
详解vue-cli中配置sass
Jun 21 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
Jul 10 Javascript
js Date()日期函数浏览器兼容问题解决方法
Sep 12 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
javascript 设计模式之享元模式原理与应用详解
Apr 08 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
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
Syphon 秘笈
2021/03/03 冲泡冲煮
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
关于工资低的辞职信
2014/01/14 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
工商管理本科生求职信
2014/07/13 职场文书
营销计划书范文
2015/01/17 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书