angular Ng-Zrro树形控件 异步加载

本文介绍了如何在Angular项目中使用Ng-Zorro库的树形控件进行异步加载数据。通过解析`nzExpandChange`和`nzClick`事件,展示如何在节点点击时获取相关信息,并提供了基本的`loadNode`方法实现,欢迎交流优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个读懂代码也挺简单的

html代码

<nz-tree [nzData]="nodes" nzAsyncData (nzClick)="nzEvent($event)" (nzExpandChange)="nzEvent($event)"> </nz-tree>

nzExpandChange 是点击展开树节点图标触发事件
nzClick 就不用介绍了吧
点击之后 会返回这些
在这里插入图片描述
eventName 就是你触发的事件名 click 和 Expand 下拉

nzEvent事件的js

 nzEvent(event: NzFormatEmitEvent): void {
    if (event.eventName === 'expand') {
      const node = event.node;
      this.basicInformation(event.keys)  // 注意传入的 keys 是个数组
      if (node?.getChildren().length === 0 && node?.isExpanded) {
        this.loadNode().then(data => {  //调用addChildren赋值
          node.addChildren(data);
        });
      }
    }
  }

basicInformation 自己写的获取数据的 js

  basicInformation(node) {
    let nodeType = ''
    if (node) {
      nodeType = node.pop() //拿到的数组取到最后一项
    }
    this.rendererMeta.executeAction({ //内部获取数据方法 
      params: {
        node: nodeType
      },
    }).then(res => {
      console.log(res);
      let nodes = []
      let content = {
        title: '',
        key: '',
        isLeaf: ''
      }
      res.items.forEach(element => {
        content.title = element.properties.name
        content.key = element.id
        content.isLeaf = element.leaf
        nodes.push(content)
        content = {
          title: '',
          key: '',
          isLeaf: ''
        }
      });
      if (node) { //第一层默认不传值 如果没有就一定是 nodesChildren
        this.nodesChildren = nodes
      } else {
        this.nodes = nodes
        console.log(this.nodes);
      }
    })
  }

loadNode代码

loadNode(): Promise<NzTreeNodeOptions[]> {
    return new Promise(resolve => {
      setTimeout(
        () =>
          resolve(this.nodesChildren),//直接成功就返回nodesChildren
        1000
      );
    });
  }

我写的方法比较笨吧 仅供参考 有优化方法欢迎交流学习 提升一下嘛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值