在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 相关文章推荐
Ext javascript建立超链接,进行事件处理的实现方法
Mar 22 Javascript
javascript中onclick(this)用法介绍
Apr 19 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
超实用的JavaScript代码段 附使用方法
May 22 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
AngularJS路由删除#符号解决的办法
Sep 28 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
JavaScript 反射和属性赋值实例解析
Oct 28 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
May 01 Javascript
JavaScript实现简单计时器
Jun 22 Javascript
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
php中in_array函数用法分析
2014/11/15 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
上学路上观后感
2015/06/16 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
简短清晨问候语
2015/11/10 职场文书
2016特色励志班级口号
2015/12/24 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
利用js实现简单开关灯代码
2021/11/23 Javascript