在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中的一些定位属性[图解]
Jul 14 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 Javascript
JavaScript的类型、值和变量小结
Jul 09 Javascript
Jquery promise实现一张一张加载图片
Nov 13 Javascript
基于javascript实现图片左右切换效果
Jan 25 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
自动适应iframe右边的高度
Dec 22 Javascript
如何用js判断dom是否有存在某class的值
Feb 13 Javascript
jQuery实现获取h1-h6标题元素值的方法
Mar 06 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
基于vue和websocket的多人在线聊天室
Feb 01 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设计模式 Factory(工厂模式)
2011/06/26 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
使用python实现飞机大战游戏
2020/03/23 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
厨师岗位职责
2013/11/12 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
三个儿子教学反思
2014/02/03 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
高一新生军训方案
2014/05/12 职场文书
房屋所有权证明
2014/10/20 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技