el-tree 的懒加载

先看效果:

在这里插入图片描述


结构如下:

<el-tree
  ref="tree"
  lazy
  :props="props"
  :load="loadNode"
  node-key="label"
  highlight-current
  @node-click="handleNodeClick">
</el-tree>

script 标签内的数据:

data() {
  return {
    ...
    // 树的结构配置
    props: {
      label: 'label',
      children: 'children',
      isLeaf: 'isLeaf'
    },
  }
},
...
methods: {
	handleNodeClick(data, node) {
      // 这里的内容怎么写,要根据实际需求
      console.log(data)
      console.log(node)
    },

	// 重点是这个函数 👇
	// 当页面渲染时,el-tree 的 :load 属性会自动调用本函数(这句话是我自己猜测的,不确定)
	async loadNode(node, resolve) {
	
      // 初始的 node.level 就是 0,这时候返回的内容就需要自己定义
      if (node.level === 0) {
        // return resolve()  
        return resolve([
          {
          	// 可以根据业务需要,在这里动态设置根节点的名称,如:this.rootName
            label: "根节点",
            // 这里本人给节点设置了 fileFullName 属性,以便发送请求时使用
            fileFullName: "/",
          }
        ])
      }

      // 当用户手动点击节点时,node.level 就都是大于等于 1 的了 
      if (node.level >= 1) {
        // 发送请求,获取子节点的数据
        let res = await loadFtpFileSystemApi({
          appId: this.appItem.id,
          fullPath: node.data.fileFullName,
        })
        // 处理请求到的数据
        let children = []
        res.data.directoryList.forEach(folder => {
          let data = {
            label: folder.fileName,
            // 标记是否为叶子节点,这个也是看实际的后端返回的数据
            isLeaf: false,
            fileFullName: folder.fileFullName
          }
          children.push(data)
        })
        res.data.fileList.forEach(file => {
          let data = {
            label: file.fileName,
            isLeaf: true,
            fileFullName: file.fileFullName
          } 
          children.push(data)
        })
        // 括号内的内容即为需要渲染的子节点,只需要将子节点数据放入括号内返回即可
        return resolve(children)
      }
    },
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值