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

Eri*_*c H 25 angular

我们想放入一个ng-content内部,*ngFor然后指定ng-content使用包含ngFor的组件的内容.可能吗?

<li *ngFor="let data of dataSource">
  <ng-content></ng-content>
</li>
Run Code Online (Sandbox Code Playgroud)

演示

Gün*_*uer 17

这是可能的,但可能不会产生预期的结果.由父项传递的子项只能投影一次(无论有多少个<ng-content>.如果<ng-content>元素没有使用select属性选择传递子项的特定和不同部分,则所有内容都将<ng-content>使用默认选择器(无)投影到第一个.

要使这项工作,您可能需要一个ngFor重复传递给内容的自定义<ng-content>.

NgForsngForTemplate可能会对您的用例有所帮助.

另请参见Angular2子组件作为数据

  • 真有帮助(-_-) (5认同)
  • 你能分享一个应该如何实施的小例子吗? (3认同)

Tus*_*osh 14

是的,它不会给你正确的结果。但这可以通过ng-template和来实现TemplateRef

我做了一个演示。您可以查看可能有帮助的演示。

子组件.html

<li *ngFor="let rowDetail of dataSource">
  <ng-container
     *ngIf="headerTemplateRef"
     [ngTemplateOutlet]="headerTemplateRef"
     [ngTemplateOutletContext]="{$implicit:rowDetail}"
  >
  </ng-container>
</li>
Run Code Online (Sandbox Code Playgroud)

子组件.ts

@ContentChild('header',{static: false}) headerTemplateRef: TemplateRef<any>;
Run Code Online (Sandbox Code Playgroud)

父组件.html

<child-app [data]="data"> 
    <ng-template let-rowDetail #header>
        <div style="padding-left:35px;">
            <div>{{rowDetail.name}}</div>
        </div>
    </ng-template>
</child-app>
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您,这正是我正在寻找的解决方案,您介意解释一下这一切是如何工作的吗? (3认同)