ng-content可以在ngFor中使用吗?

时间:2016-02-04 00:06:03

标签: angular

我们想在ng-content内加*ngFor,然后在使用包含ngFor的组件时指定ng-content的内容。有可能吗?

<li *ngFor="let data of dataSource">
  <ng-content></ng-content>
</li>

Demo

2 个答案:

答案 0 :(得分:17)

有可能但不可能产生预期的结果。由父母传递的子项只能投射一次(无论有多少<ng-content>。如果<ng-content>元素不使用{{1}选择传递的子项的特定和不同部分} attribute,然后使用默认选择器(none)将所有内容投影到第一个select

为了完成这项工作,您可能需要一个自定义<ng-content>来重复传递给ngFor的内容。

NgFors ngForTemplate可能会对您的用例有所帮助。

另见Angular2 child component as data

答案 1 :(得分:9)

是的,它不会给您适当的结果。但这可以通过ng-templateTemplateRef来实现。

我做了一个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>