You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在构建Angular Material树时为节点存储对应层级路径信息

实现方案

1. 调整FileNode类型定义

给FileNode新增可选的path字段,用来存储完整层级路径:

export class FileNode {
  filename: string;
  children?: FileNode[];
  type?: any;
  path?: string; // 新增路径存储字段
}

2. 修改buildFileTree方法

新增parentPath入参传递父级路径,递归时拼接当前层级的key生成完整路径,仅给带type的叶子节点赋值path:

// 新增第三个参数parentPath,默认值为空字符串
buildFileTree(obj: {[key: string]: any}, level: number, parentPath: string = ''): FileNode[] {
  return Object.keys(obj).reduce<FileNode[]>((accumulator, key) => {
    const value = obj[key];
    const node = new FileNode();
    node.filename = key;
    // 拼接当前节点的完整路径
    const currentPath = parentPath ? `${parentPath}.${key}` : key;

    if (value != null) {
      if (typeof value === 'object') {
        // 递归生成子节点时,传入当前节点路径作为父路径
        node.children = this.buildFileTree(value, level + 1, currentPath);
      } else {
        node.type = value;
        // 仅给带type的叶子节点赋值path字段
        node.path = currentPath;
      }
    }
    return accumulator.concat(node);
  }, []);
}

3. 修正initialize方法的冗余逻辑

原代码中TREE_DATA已经是JSON.parse处理后的对象,不需要重复解析,否则会报错:

initialize() {
  // 直接传入TREE_DATA,移除多余的JSON.parse
  const data = this.buildFileTree(TREE_DATA, 0);
  this.dataChange.next(data);
}

效果验证

修改后生成的树节点中,所有叶子节点都会携带正确的path字段,示例输出如下:

{
  "filename": "model",
  "type": "",
  "path": "cars.0.model"
}

完全符合要求的路径格式。


内容的提问来源于stack exchange,提问作者Sandy_22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:05