在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 相关文章推荐
jquery插件开发方法(初学者)
Feb 03 Javascript
用Jquery实现滚动新闻
Feb 12 Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
Angularjs注入拦截器实现Loading效果
Dec 28 Javascript
简单谈谈关于 npm 5.0 的新坑
Jun 08 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
Sep 28 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
Dec 25 jQuery
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
JavaScript创建对象的常用方式总结
Aug 10 Javascript
原生JS实现$.param() 函数的方法
Aug 10 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 mssql 数据库分页SQL语句
2008/12/16 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
分享php邮件管理器源码
2016/01/06 PHP
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python 基础教程之包和类的用法
2017/02/23 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python生成九宫格图片
2018/11/19 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
德国足球商店:OUTFITTER
2019/05/06 全球购物
会计工作心得体会
2014/01/13 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
教师师德表现自我评价
2015/03/05 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技