iview table后端分页 多选 翻页选中回显

简介: iview table后端分页 多选 翻页选中回显

在iview的table组件中,前端在多选时如果点击下一页则丢失了上一页table的多选数据(由于采用的后端分页,每次翻页会直接刷新为新数据)

实现效果
全选反选 选中单条 取消单条

image.png

      selectedData: [], // 选中的数组
      arr1: [], // 原本
      arr2: [] // 去重后的
<Table class="mt20" :data="tableData" :loading="loading" :columns="tableColumns" ref="table"
   @on-select="onSelectAll" @on-select-cancel='onSelectCancel'
   @on-select-all ='onSelectAll' @on-select-all-cancel='onSelectAllCancel'>
</Table>

   // 点击全选时触发
    onSelectAll (selection) {
      // arr1 去重之前的 选中后合并的数组
      this.arr1 = [...selection, ...this.selectedData]
      // 去重  some  和every 相反,只要有一个满足条件,就返回true
      for (let val of this.arr1) {
        if (!this.arr2.some(item => item.serialNum === val.serialNum)) {
          this.arr2.push(val)
        }
      }
      if (this.arr2.length >= 30) {
        this.enableModal = true
      }
    },
    
    // 取消选中某一项时触发
    onSelectCancel (selection, row) {
      // 拿到取消选择的项数据 从arr2中去除 findIndex找返回传入一个符合条件的数组第一个元素位置,没有返回-1
      let result = this.arr2.findIndex((ele) => {
        return ele.serialNum === row.serialNum
      })
      this.arr2.splice(result, 1)
    },
    
    // 点击取消全选时触发
    onSelectAllCancel () {
      // 拿到当前分页的数据进行取消选中处理
      // every方法,只要有一项不满足条件就返回false,也就是说必须每一项都得满足才能返回true。返回的是布尔值。
      // * filter方法,只要条件满足,我就将此元素返回出去,返回的是元素。
      // *  在本示例中,只要arr1中存在与arr2中相同的元素,我就返回false。也就是说,我拿着arr2中
      // *  的第一项去和arr1中的每一项去比较,如果code都不相等,满足所有条件,我就返回true。
      // *       在filter中,只要条件为true,我就将这一项返回出去,就实现了批量删除的效果。
          this.arr2 = this.arr2.filter(item => {
        return this.tableData.every(item2 => {
          return item.serialNum !== item2.serialNum
        })
      })
    },

本文采用 serialNum 作为唯一的值 可以选为id 根据具体情况而定

每次点击分页的时候,获取到最新一页的数据,进行选中回显
在点击分页 调用的事件里写

 getTableList (pageIndex) {
      this.pageIndex = pageIndex
      this.loading = true
      const data = {
        name: this.name,
        serialNum: this.serialNum,
        pageIndex,
        pageSize: this.pageSize
      }
      getDevicePageList(data)
        .then(res => {
          const { data: {data, code} } = res
          if (data && code === 0) {
            data.list.forEach(item => {
            // 禁用选项
                  if (item.id === 19) { // 判断条件
                    this.$set(item, '_disabled', true)
                  }
              this.arr2.forEach(element => {
                if (element.serialNum === item.serialNum) {
                  this.$set(item, '_checked', true)
                }
              })
            })
            this.tableData = data.list
            this.dataCount = data.total
          } else {
            this.$Message.error(res.message)
          }
          this.loading = false
        }, err => {
          // 接口错误
          console.log(err)
        })
        .catch((err) => {
          // 处理逻辑出错
          console.log(err)
        })
    },

相关文章
|
前端开发 Java 测试技术
java通用分页(后端)
1.通用分页是什么? Java通用分页是指在Java编程语言中实现的一种通用分页功能。它通常用于在Java Web应用中展示大量数据或查询结果,并将其分页显示给用户。
213 1
|
3月前
|
安全 中间件 项目管理
Django 后端架构开发:分页器到中间件开发
Django 后端架构开发:分页器到中间件开发
41 1
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
4月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(30)--- ABP后端和Vue+Element前端结合的分页排序处理
循序渐进VUE+Element 前端应用开发(30)--- ABP后端和Vue+Element前端结合的分页排序处理
|
4月前
|
前端开发
后端一次返回大量数据,前端做分页处理
后端一次返回大量数据,前端做分页处理
145 0
|
5月前
|
SQL Java 数据库连接
大事件后端项目28------文章分类列表查询(条件分页)
大事件后端项目28------文章分类列表查询(条件分页)
|
6月前
|
前端开发 JavaScript
vue实现通用分页控件,支持前端分页、后端分页。
vue实现通用分页控件,支持前端分页、后端分页。
86 1
|
6月前
|
前端开发 JavaScript
工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办
工作这么久了,还不懂如何使用纯前端实现分页吗?-假如后端一股脑返回给你所有数据,让你自个实现分页该怎么办
138 0
|
11月前
|
SQL Java 关系型数据库
通用分页详细讲解(后端)
通用分页详细讲解(后端)
63 0
|
Java 测试技术 数据库连接
通过分页的详解(后端)2
通过分页的详解(后端)
86 0
下一篇
无影云桌面