Что эквивалентно <template * ngFor в Angular 2?

Я хочу сделать что-то вроде этого:

<div *ngFor="let parent of parents">
    <div *ngFor="let child of parent.children">
    </div>
</div>

но я не хочу этого дополнительного внешнего div. Из того, что мне удалось найти, в Angular 1 я мог бы добиться этого, выполнив следующее:

<template *ngFor="let parent of parents">
    <div *ngFor="let child of parent.children">
    </div>
</template>

Однако это не работает в Angular 2. Каков правильный способ сделать это?

Ответ 1

Я думаю, это должно сработать для вас:

<ng-template ngFor let-parent [ngForOf]="parents">
   <div *ngFor="let child of parent.children">
   </div>
</ng-template>

Вы можете прочитать здесь:

https://angular.io/docs/ts/latest/guide/template-syntax.html#!#star-template

Также вы можете использовать:

<ng-container *ngFor="let parent of parents">
   <div *ngFor="let child of parent.children">
   </div>
</ng-container>

Преимущество состоит в том, что он имеет тот же синтаксис, что и с обычным элементом dom.

Ответ 2

<ng-container> ведет себя как тег <template> (он не добавляется в DOM), но позволяет использовать более удобный синтаксис структурной директивы *foo:

<ng-container *ngFor="let parent of parents">
    <div *ngFor="let child of parent.children">
    </div>
</ng-container>

Подробнее о NgFor см. https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html