在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 相关文章推荐
取键盘键位ASCII码的网页
Jul 30 Javascript
THREE.JS入门教程(3)着色器-下
Jan 24 Javascript
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
简述JavaScript的正则表达式中test()方法的使用
Jun 16 Javascript
基于jstree使用AJAX请求获取数据形成树
Aug 29 Javascript
vue项目中用cdn优化的方法
Jan 03 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
layui实现二维码弹窗、并下载到本地的方法
Sep 25 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
vue中 v-for循环的用法详解
Feb 19 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 Javascript
用几道面试题来看JavaScript执行机制
Apr 30 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 has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
Atom的python插件和常用插件说明
2018/07/08 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python解释器安装教程的方法步骤
2020/07/02 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
python字典按照value排序方法
2020/12/28 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
家长评语大全
2014/01/22 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
自我检讨书怎么写
2015/05/07 职场文书
公司备用金管理制度
2015/08/04 职场文书
关于环保的广播稿
2015/12/17 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
pandas数值排序的实现实例
2021/07/25 Python