简体   繁体   English

在 Angular 模板中循环遍历带有子项的 Javascript 对象

[英]Loop through Javascript object with children in Angular template

I have the following js object:我有以下 js 对象:

{
    "id": "1554038371930_ajhnms9ft",
    "name": "CPS",
    "nodes": [
        {
            "id": "1554038905938_le34li2cg",
            "name": "Consumer Journey",
            "nodes": [
                {
                    "id": "1554039157958_kwab8rj5f",
                    "name": "Average Rating",
                    "nodes": []
                },
                {
                    "id": "1554039174126_p47ugwkbv",
                    "name": "Product Quality",
                    "nodes": [
                        {
                            "id": "1554039298091_ewdyefkql",
                            "name": "Performance",
                            "nodes": []
                        },
                        {
                            "id": "1554039306834_qf54k1dqe",
                            "name": "Reliability",
                            "nodes": []
                        },
                        {
                            "id": "1554039320002_vfkenjmct",
                            "name": "Comfort",
                            "nodes": []
                        }
                    ]
                },
                {
                    "id": "1554039197951_ajvv8587d",
                    "name": "Supply & Delivery",
                    "nodes": []
                },
                {
                    "id": "1554735679177_g5tini7ga",
                    "name": "Behind Product",
                    "nodes": [
                        {
                            "id": "1554736595466_nt4owp9in",
                            "name": "Influencers",
                            "nodes": []
                        },
                        {
                            "id": "1554736608593_58yomqpya",
                            "name": "Brand Confidence",
                            "nodes": []
                        }
                    ]
                },
                {
                    "id": "1554736413715_jhro1oh0r",
                    "name": "Economical Value",
                    "nodes": [
                        {
                            "id": "1554736664421_wng97pbz8",
                            "name": {
                                "en": "Price"
                            },
                            "nodes": []
                        },
                        {
                            "id": "1554736676408_d4kiy2wv8",
                            "name": "Promotion & Reward",
                            "nodes": []
                        }
                    ]
                }
            ]
        }
    ]
}

I want to loop through it in my angular HTML template so I can have the following list:我想在我的角度 HTML 模板中循环遍历它,这样我就可以得到以下列表:

CPS
    Consumer Journey
        Average Rating
        Product Quality
            Performance
            Reliability
            Comfort
        Supply & Delivery
        Behind Product
            Influencers
            Brand Confidence
        Economical Value
            Price
            Promotion & Reward

PS: I have an unknown number of levels! PS:我的关卡数量未知!

I tried to implement that but my solution works only if I have a known number of levels:我试图实现它,但我的解决方案仅在我具有已知数量的级别时才有效:

<div *ngFor="let item of data">
  <p>{{ item.name }}</p>
  <div *ngIf="item.nodes.length">
    <div *ngFor="let subItem of item.nodes">
      <p>{{ subItem.name }}</p>
      <div *ngIf="subItem.nodes.length">
        <div *ngFor="let child of subItem.nodes">
          {{ child.name }}
        </div>
      </div>
    </div>
  </div>
</div>

you need a recursive component to loop through n levels:您需要一个递归组件来遍历 n 个级别:

@Component({
  selector: 'recursive-list',
  template: `
    <div *ngFor="let item of data">
      <p>{{ item.name }}</p>
      <recursive-list *ngIf="item.nodes.length" [data]="item.nodes"></recursive-list>
    </div>
  `
})
export class RecursiveListComponent {
  @Input() data;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM