前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在vue和element-ui的table中实现分页复选

在vue和element-ui的table中实现分页复选

作者头像
Careteen
发布于 2022-02-14 08:36:20
发布于 2022-02-14 08:36:20
1.2K00
代码可运行
举报
文章被收录于专栏:源码揭秘源码揭秘
运行总次数:0
代码可运行

实现分页复选

背景

后台管理系统中,使用表格展示数据时,可能的需求是多项选择然后进行批量操作,也期望能翻页多选。

实现

页面结构如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

模拟数据实现分页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
  },
}

展示已选择项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="result">
  已选:{{ allMultipleSelection }}
</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
allMultipleSelection: [],

在复选事件中对所选项进行存储

主要思路就是:

  • 将当前页已选数据放入所有已选项
  • 将所有已选项数据中当前页没选择的项移除
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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')
},

此时还需要在切换页面时将之间选择项进行重新选中,即遍历当前页所有数据如果存在于所有已选项中,则将其置为已选择。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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')
    }
  })
},

以上实现了分页复选功能。

所有代码存放在@careteen/lan-vue

查看DEMO

clone仓库并引入依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone git@github.com:careteenL/lan-vue.git
npm install
npm run serve

浏览器打开 http://localhost:8080/#/examples/pagingCheck 即可看到效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Element Plus使用
愷龍
2024/07/17
1670
Element Plus使用
element ui table组件的基本使用
  前后端分离项目,将后端返回的JSON格式数据在前端用vue友好显示出来,这时候就需要用到饿了么的element ui框架了,这个框架简直是后端开发人员的福音。
别团等shy哥发育
2023/02/25
8950
element ui table组件的基本使用
Vue框架Element UI教程-axios表格分页(九)
今天来写一个分页,表格分页在实际项目中经常用到,之前也写过关与bootstrap table 里面的表格分页,道理都差不多一样的,Element UI也有自己的组件可以用,话不多说,直接上代码了。
王小婷
2019/05/26
3.1K1
flask+vue:创建一个数据列表并实现简单的查询功能(一)
这里要用到element-ui中Select 选择器、 Form 表单 、DatePicker 日期选择器
冰霜
2022/03/15
2.3K1
flask+vue:创建一个数据列表并实现简单的查询功能(一)
vue——element-ui中的表格和分页器连接起来
上面的代码时elementUI官方示例,简单分析一下:el-table 里面的 :data 是数据源;el-table-column 是表格里面的每一行的数据,它里面的 prop 绑定的是 :data 数据源里面的某个属性值,由此形成一个表格。
江一铭
2022/06/16
1.7K0
二开vue-admin-template-4-curd
腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧!
无敌小菜鸟
2022/04/02
3820
二开vue-admin-template-4-curd
eltable的分页
分页思路 前端实现自己的分页 这种思路一般就是后台返回的数据没有做分页处理 前端对返回的数据进行简单的分页 eleui提供了分页的插件,直接使用就可以了 实现思路: 对后端返回的数据js计算出它的length,length就是 分页参数中的总数, <el-table @row-click="handle" :row-class-name="tableRowClassName" :data="typeList.slice((this.query.pageNum - 1) *
安德玛
2022/03/05
5790
猿实战08——属性库实现之属性关系绑定
属性和属性值,看上去很不起眼,数据粒度也很小,但是正式因为数据粒度小,灵活多变,组织得当可以强有力的区分千变万化的商品。
山旮旯的胖子
2020/09/05
8700
猿实战08——属性库实现之属性关系绑定
maven+vue+servlet+element+MyBatis 前后端分离小项目
准备工作 需要的文件我已经打包好了: 链接:https://pan.baidu.com/s/1gTIi2nTHHv3bfcy5khKxgw 提取码:i2al 前端页面:可参考此篇文章 Element 入门教程 自行编写,也可以直接使用我准备好的模板 sql 文件 ```sql -- 创建数据库 create database db1 character set utf8; use db1; -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_
ruochen
2022/03/03
3.2K0
maven+vue+servlet+element+MyBatis 前后端分离小项目
vue+Element-ui实现分页效果
当我们向后台请求大量数据的时候,并要在页面展示出来,请求的数据可能上百条数据或者更多的时候,并不想在一个页面展示,这就需要使用分页功能来去完成了。
小周sir
2019/09/23
1.4K0
vue+Element-ui实现分页效果
SpringBoot + Vue + ElementUI 实现 el-table 分页功能详解
在现代Web应用程序开发中,前后端分离架构越来越受欢迎。这种架构使得前端和后端开发可以并行进行,提高了开发效率。本文将详细讲解如何使用SpringBoot作为后端,Vue.js和ElementUI作为前端,实现一个带分页功能的数据表格(el-table)。分页功能在处理大量数据时必不可少,可以有效提升用户体验和系统性能。
繁依Fanyi
2024/09/11
4010
校园管理系统(小程序+后台管理)——直击毕设
首先需要完成的是小程序的开发,小程序端我选择的是云开发,因为我想的是反正做一个只在学校用就那几w人也撑不爆云服务空间哇。
淼学派对
2023/10/23
6530
校园管理系统(小程序+后台管理)——直击毕设
Element 分页组件使用、时间转换
Element,‘饿了吗’,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,使用这个分页组件遇到的坑记录一下。
Lcry
2022/11/29
4390
vue+Element实现固定表头、左侧列、搜索、排序与分页
(adsbygoogle = window.adsbygoogle || []).push({});
tianyawhl
2019/04/04
6.4K0
ElementUI 分页+django rest framework
在之前的文章中,链接如下:https://www.cnblogs.com/xiao987334176/p/14313471.html
py3study
2021/03/29
1.7K0
ElementUI 分页+django rest framework
手拉手springboot+vue2+Element实现分页
@TableName是mybatis-plus中的注解,主要是实现实体类型和数据库中的表实现映射。
QGS
2023/12/20
2050
vue的表格和分页
前面有提到在vue里面,对于表格的使用:vue2.0 + element-ui 实战项目-渲染表格(四)https://www.jianshu.com/p/fea8cacc04b9,在实战的过程中,往往还要选择一个合适的分页,搭配着一起使用,尤其是数据比较多的时候,必然会做出分页效果。
王小婷
2021/03/04
1.2K0
vue的表格和分页
Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统
最近正在学习Vue2.0相关知识,正好近期饿了么桌面端组件Element-UI发布,便动手做了一款简易个人记账系统,以达到实践及巩固目的。
guokun
2020/09/03
9250
Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统
vue+element踩坑记-表格的分页实现
今天简单的介绍一下element的分页是怎么实现的,先说一下感受,之前一直是使用的jQuery的分页,其实也不全算是,使用的本质还是BootStrapUI的分页,感兴趣的可以翻翻我之前写的文章,有关于这块的,这里就不做任何的赘述,那么说这个原则是用完element的分页以后觉得真的是太简单的,简单的写完甚至没有一点的成就感。不BB,我们看效果和代码!
何处锦绣不灰堆
2020/05/29
1.4K0
vue+element踩坑记-表格的分页实现
vue表格分页以及增删改查的实际应用
效果 1:表格以及分页 2:增加一条数据 3:删除一条数据 4:修改一条数据 5:查询一条数据 实例: <template> <div class="tab-container"> <d
王小婷
2021/03/17
1.9K0
相关推荐
Element Plus使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档