我想创建一个嵌套层。
@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>
这可能吗?
答案 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>