解决el-tree或树形列表懒加载数据改变后不能实时刷新问题

 在使用此类树形列表时,懒加载数据时会遇到数据无法实时刷新的问题,需要手动刷新才能正常显示,这时可以使用下面的方法:

1.首先在data return中加入一个map来用于存取数据

data() {
    return {
      maps: new Map()
    }
  }

2.在el-tree或树形列表组件加载子级的方法中,用map存下每次被加载的父节点

async loadChildren(tree, treeNode, resolve) {
      this.maps.set(tree.id, { tree, treeNode, resolve }) //储存数据
      const listQuery = {
        page: 0,
        size: 200,
        parentId: tree.id
      }
      const resp = await this.getChildren(listQuery)
      resolve(resp.data)
    },

3.封装一个refreshLoadTree方法,每次增删改查操作后都调用一下,以此达到实时刷新目的

refreshLoadTree(lazyTreeNodeMap, maps, parentId) {
      if (maps.get(parentId)) {
        const { tree, treeNode, resolve } = maps.get(parentId)
        this.$set(lazyTreeNodeMap, parentId, [])
        if (tree) { // 重新执行父节点加载子级操作
          this.loadChildren(tree, treeNode, resolve)
          if (tree.parentId) { // 若存在爷爷结点,则执行爷爷节点加载子级操作,防止最后一个子节点被删除后父节点不显示删除按钮
            const a = maps.get(tree.parentId)
            this.loadChildren(a.tree, a.treeNode, a.resolve)
          }
        }
      }
    }

这里传入的三个参数分别是:组件懒加载数据的节点,data return的map,以及被操作的节点的父节点

this.refreshLoadTree(this.$refs.table.store.states.lazyTreeNodeMap, this.maps, this.temp.parentId)

方法调用时首先从map中取出刚刚加载过子级的节点的数据,再用this.$set清空对应父节点的数据,实现了视图的实时刷新,再通过取出的数据重新加载父节点数据。

记得对组件加上命名

<el-table
      ref="table"
    >

在增加,删除,编辑,加载子级操作的方法中调用这个方法,可以发现数据已经能实时刷新了。

好了,结束了。

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值