在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』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
JS实现仿微博可关闭弹出层效果
Sep 21 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 Javascript
JS实现保留n位小数的四舍五入问题示例
Aug 03 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
深入探究AngularJs之$scope对象(作用域)
Jul 20 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
Aug 17 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
vue-cli3环境变量与分环境打包的方法示例
Feb 18 Javascript
layui表格数据复选框回显设置方法
Sep 13 Javascript
浅探express路由和中间件的实现
Sep 30 Javascript
js实现轮播图特效
May 28 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对象的浅复制与深复制的实例详解
2017/10/26 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python实现函数极小值
2019/07/10 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
中职生自荐信
2013/10/13 职场文书
药品采购员岗位职责
2014/02/08 职场文书
庆祝教师节标语
2014/10/09 职场文书
升职自荐信范文
2015/03/27 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
中秋节感想
2015/08/10 职场文书
《开国大典》教学反思
2016/02/16 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
SQL Server删除表中的重复数据
2022/05/25 SQL Server