解决element-ui中el-tree懒加载load只执行一次问题

问题描述

目前el-tree在lazy=true(懒加载)情况下,只有在首次展开树节点才会执行loadNode方法,合上再次展开则不会执行

如果项目需求每次展开都要实时获取最新节点数据,显然需要寻求实现方法

解决办法

绑定一个节点被关闭时触发的事件handleNodeCollapse, 在每次节点关闭时将loaded(判断节点是否已经加载的唯一标识)重置为false,同时将该节点的所有子节点childNodes清空

<el-tree
  :props="props"
  :load="loadNode"
  lazy
  @node-collapse="handleNodeCollapse"
</el-tree>

<script>
  export default {
    data() {
      return {
        props: {
          label: 'name',
          children: 'childrenList',
          isLeaf: 'leaf'
        },
      };
    },
    methods: {
      loadNode(node, resolve) {
        let res = [] // 接口返回数据
        return resolve(res);
      },
      handleNodeCollapse(data, node) {
      	node.loaded = false
      	node.childNodes.splice(0, node.childNodes.length)
      }
    }
  };
</script>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI Tree 组件支持懒加载,也就是说只有当节点被展开时才会去加载该节点下的子节点数据。这在处理大量数据时能够提高性能和用户体验。 要使用懒加载,需要为 Tree 组件设置 load 方法,该方法会在节点展开时被调用。load 方法接收一个参数 node,表示当前被展开的节点。在 load 方法,我们可以通过异步请求获取该节点下的子节点数据,并使用 resolve 方法将数据返回给 Tree 组件。 示例代码如下: ```html <template> <el-tree :data="data" :load="loadData"></el-tree> </template> <script> export default { data() { return { data: [ { label: '一级节点', children: true // 表示该节点有子节点,但未加载 } ] } }, methods: { loadData(node, resolve) { // 异步请求获取子节点数据 setTimeout(() => { const children = [ { label: '二级节点1' }, { label: '二级节点2' } ] // 将子节点数据返回给 Tree 组件 resolve(children) }, 1000) } } } </script> ``` 在上述示例,我们通过设置 children 属性为 true 来表示该节点有子节点,但未加载。当该节点被展开时,会调用 loadData 方法,该方法会通过异步请求获取子节点数据,并使用 resolve 方法将数据返回给 Tree 组件。返回的数据会自动渲染为该节点的子节点。 需要注意的是,load 方法需要返回一个 Promise 或在回调函数调用 resolve 方法。如果返回的是 Promise,则需要在 Promise resolve 子节点数据,例如: ```javascript loadData(node) { return new Promise(resolve => { // 异步请求获取子节点数据 setTimeout(() => { const children = [ { label: '二级节点1' }, { label: '二级节点2' } ] // 将子节点数据返回给 Tree 组件 resolve(children) }, 1000) }) } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值