如何动态添加Angular组件内容?

时间:2019-06-12 08:05:16

标签: angular angular7

我想创建一个嵌套层。

@Component({
    selector: 'items-collection',
    template: '<ng-content></ng-content>'
})
export class ItemsComponent {
}

HTML用法如下:

<items-collection>
    <item [name]="item-1"></item>
    <item [name]="item-2"></item>
    <item [name]="item-3"></item>
</items-collection>

但是,如果我设置了items-collection的json源数据,则数据将动态追加。

@Component({
    selector: 'items-collection',
    template: '<ng-content></ng-content>'
})
export class ItemsComponent {
    private jsondata:any[] = [
        {"name": "item-8"}, 
        {"name": "item-9"},
        {"name": "item-15"}
    ]
}

<items-collection source="jsondata">
    <item [name]="item-1"></item>
    <item [name]="item-2"></item>
    <item [name]="item-3"></item>
</items-collection>

这可能吗?

2 个答案:

答案 0 :(得分:1)

在ItemsComponent中,

@Component({
    selector: 'items-collection',
    template: `<ng-container *ngFor=let data of jsonData">
                  <item [name]="data.name"></item>
              </ng-container>`
})  
export class ItemsComponent {
    @Input('source') jsonData: any[] = [];
}

以及要在其中添加项目集合的地方,

在该组件ts和html文件中包含以下代码,

private jsondata:any[] = [
        {"name": "item-8"}, 
        {"name": "item-9"},
        {"name": "item-15"}
    ]


<items-collection [source]="jsondata">       
</items-collection>

答案 1 :(得分:0)

您可以将<ng-content>与普通的*ngFor组合在一起:

@Component({
    selector: 'items-collection',
    template: `
      <ng-content></ng-content>
      <item *ngFor="let item of source" [name]="item.name"></item>
    `
})
export class ItemsComponent {
  @Input() source?: { name: string }[];
}

确保使用输入绑定

<items-collection [source]="jsondata">
    <item [name]="'item-1'"></item>
    <item [name]="'item-2'"></item>
    <item [name]="'item-3'"></item>
</items-collection>