使用 children 数组迭代嵌套 object

Iterate over nested object with array of children

我正在尝试使用 Angular TS 在嵌套的 object 结构上进行迭代:

{
  "stringKey1": {
    "child": [
      {
        "stringKey2": {
          "child": []
        }
      },
      {
        "stringKey3": {
          "child": []
        }
      },
      {
        "stringKey4": {
          "child": [
            {
              "stringKey5": {
                "child": []
              }
            },
            {
              "stringKey6": {
                "child": []
              }
            }
          ]
        }
      }
    ]
  }
}

基本上每个“节点”都由一个字符串Key和一个object {"child" : []}组成,可以有很多children具有相同的结构。

我用管道试过 *ngFor,试过 *ngIf 来检查它是否是一个数组,但我无法设法让它起作用。无法知道结构有多深。

基本上尝试了我在互联网上看到的任何东西,但我可能遗漏了一些东西。

有什么帮助吗?

非常感谢。

我会避免嵌套对象 for-looping 附带的过多模板逻辑。很难阅读和调试。相反,尽可能简化 TS 代码中的数据。然后在模板中操作。

但我们可以利用 | keyvalue 管道通过 *ngFor 迭代对象。然后我们使用 ng-template*ngTemplateOutlet 来创建递归。

<ng-template #recursiveList let-array>
  <li *ngFor="let item of array | keyvalue">
    {{item.key}} {{item.value}}
    <ul *ngIf="item.value"> 
      <ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: item.value }"></ng-container>
    </ul>
  </li>
</ng-template>

<ng-container *ngTemplateOutlet="recursiveList; context:{ $implicit: object }"></ng-container>

这是一个工作示例:https://stackblitz.com/edit/angular-nested-ngfor-in-table-4nqhve?file=src%2Fapp%2Fapp.component.html