我们想在ng-content
内加*ngFor
,然后在使用包含ngFor的组件时指定ng-content
的内容。有可能吗?
<li *ngFor="let data of dataSource">
<ng-content></ng-content>
</li>
答案 0 :(得分:17)
有可能但不可能产生预期的结果。由父母传递的子项只能投射一次(无论有多少<ng-content>
。如果<ng-content>
元素不使用{{1}选择传递的子项的特定和不同部分} attribute,然后使用默认选择器(none)将所有内容投影到第一个select
。
为了完成这项工作,您可能需要一个自定义<ng-content>
来重复传递给ngFor
的内容。
NgFor
s ngForTemplate
可能会对您的用例有所帮助。
答案 1 :(得分:9)
是的,它不会给您适当的结果。但这可以通过ng-template
和TemplateRef
来实现。
我做了一个demo。您可以看到可能有帮助的演示。
child.component.html
<li *ngFor="let rowDetail of dataSource">
<ng-container
*ngIf="headerTemplateRef"
[ngTemplateOutlet]="headerTemplateRef"
[ngTemplateOutletContext]="{$implicit:rowDetail}"
>
</ng-container>
</li>
child.component.ts
@ContentChild('header',{static: false}) headerTemplateRef: TemplateRef<any>;
parent.component.html
<child-app [data]="data">
<ng-template let-rowDetail #header>
<div style="padding-left:35px;">
<div>{{rowDetail.name}}</div>
</div>
</ng-template>
</child-app>