美文网首页
vue 2.X +iview4.0 table组件多选分页回显

vue 2.X +iview4.0 table组件多选分页回显

作者: 橘子花儿橙味甜 | 来源:发表于2019-12-25 10:23 被阅读0次

在写业务的时候难免遇到table多选,翻页后需要回显的功能,以前写react antd 组件是提供一个所有保存rowKeys的数组保存的,自动回显,然后可以自定义key,比如用每条数据的id做key,一般后端给的数据的id都是唯一的,所以没有问题。
但是在写vue的时候发现,不管是element还是iview 都没有提供自定义table数据key的功能,所以做回显自能自己写逻辑,因为最近在用iview 就用iview做例子

on-select 在多选模式下有效,选中某一项时触发 selection:已选项数据 row:刚选择的项数据

on-select-cancel 在多选模式下有效,取消选中某一项时触发 selection:已选项数据
row:取消选择的项数据

需要用到的就是这两个方法,然后加上

通过给 columns 数据设置一项,指定 type: 'selection',即可自动开启多选功能。
给 data 项设置特殊 key _checked: true 可以默认选中当前项。

下面上代码

<Table
        :columns="tableColumn"
        :data="tableData"
        ref="table"
        @on-select="selectChange"
        @on-select-cancel="selectChangeCancel"
      >
</Table>
// 勾选
 selectChangeOut(el, row) {
      let productData = JSON.parse(JSON.stringify(this.productData))
      productData.push(row)
      this.productData = productData
  
  },
// 取消选择
 selectChangeCancel(el, row) {
      let productData = JSON.parse(JSON.stringify(this.productData))
      let newProductData = productData.filter(item => {
        return item.id != row.id
      })
      this.productData = newProductData
  },
// 回显勾选
    selectedTrue(selects) {
      setTimeout(() => {
        let tableData = JSON.parse(JSON.stringify(this.tableData))
        this.productData.forEach(el => {
          let index = tableData.findIndex(i => {
            return el.id == i.id
          })
          if (index != -1) {
            this.$refs.table.objData[index]._isChecked = true
          }
        })
      }, 0)
    },

在每次分页请求之后调用这个方法就好了,为什么要setTimeout,是因为如果不加,那么这个方法执行会在table数据填充之前 ,找不到able的objData属性。各位有其他更好的回显方法也可以试试
回显方法个人建议,直接放在 请求后端接口的方法里面,比如我个人喜欢用getData做请求接口函数名

// 调接口查询数据
getData: async function() {
      let res = await xxxx()
      this.selectedTrue()
  }

以上

这么写会有一个bug 就是点击全选的时候,数据并不能保存在 this.productData里面,可以自己再写一个全选的,或者用on-selection-change换掉on-select 逻辑就大家自己写了哦

相关文章

网友评论

      本文标题:vue 2.X +iview4.0 table组件多选分页回显

      本文链接:https://www.haomeiwen.com/subject/gdnqoctx.html