element表格多页分页选中并回显vue

vue开发遇到多页分页选中并回显的需求,整理如下

<el-table
 ....
 @select="handleSelect"
 @select-all="handleSelectAll"
>

data数据
	{
	 ...
     selectUsers: [], // 批量选择的用户
     selectUsersTemparr: [],
    }
methods:
 handleSelect(data) {
      // 本页选中的数据,翻页后依旧需要保留
      // 方案就是 selectUsersTemparr
      let hasExist = false
      let hasExistIndex = 0
      for (let i = 0, len = this.selectUsersTemparr.length; i < len; i++) {
        if (this.selectUsersTemparr[i].curPageNum === this.currentPage) {
          hasExist = true
          hasExistIndex = i
          break
        }
      }
      if (hasExist) {
        // 已经存在
        this.selectUsersTemparr[hasExistIndex].curPageData = data
      } else {
        // 还不存在当页数据
        this.selectUsersTemparr.push({
          curPageNum: this.currentPage,
          curPageData: data
        })
      }
      // 先清空selectUsers
      this.selectUsers = []
      this.selectUsersTemparr.forEach((sItem) => {
        this.selectUsers = this.selectUsers.concat(sItem.curPageData)
      })
    },
    handleSelectAll(data) {
      if (data.length) {
        this.handleSelect(data)
      } else {
        let index = 0
        for (let i = 0, len = this.selectUsersTemparr.length; i < len; i++) {
          if (this.selectUsersTemparr[i].curPageNum === this.currentPage) {
            index = i
            break
          }
        }
        this.selectUsersTemparr.splice(index, 1)
        // 先清空selectUsers
        this.selectUsers = []
        this.selectUsersTemparr.forEach((sItem) => {
          this.selectUsers = this.selectUsers.concat(sItem.curPageData)
        })
      }
    },
    // 获取接口后,调用该方法
    defaultSelected() {
      // 先看看当前页有没有选中项
      let tarIndex = -1
      for (let i = 0, len = this.selectUsersTemparr.length; i < len; i++) {
        if (this.selectUsersTemparr[i].curPageNum === this.currentPage) {
          tarIndex = i
        }
      }
      if (
        tarIndex !== -1 &&
        this.selectUsersTemparr[tarIndex].curPageData.length
      ) {
        // 说明当前页有选中项 把当前页选中项的index去都摘出来
        const tempIndexArr = this.selectUsersTemparr[tarIndex].curPageData.map(
          (tItem) => {
            return tItem.index
          }
        )

        tempIndexArr.forEach((iItem) => {
          this.$refs.table.toggleRowSelection(this.tableData[iItem], true)
        })
      }
    },
    ...
    // 接口查询列表数据
    getList(){
    	...
    	// 从接口得到列表数据content,需要与每页item赋值index索引,作为复选框回显标识
    	this.tableData = content.map((item, i) => {
        	item.index = i
        })
    	this.$nextTick(()=>{
    		this.defaultSelected()
    	}
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值