Следующий код уже немного зловреден с точки зрения вложенных тегов ng-this и ng-that, но было бы намного красивее, если бы был способ пропустить ngSwitch для ngIf и просто передать контекст в другую ветку, как
prop;context:{property: property}"
, как показано в * ngTemplateOutlet, также вызываемом в шаблоне. Я надеюсь, что сделал все возможное, чтобы найти способы сделать это, но до сих пор ни один вариант не представился мне, кроме как использовать (еще один!) Вложенный * ngTemplateOutlet. Разметка немного подрезана под необходимые вещи.
<ng-template #prop let-property="property">
<node-widget
[property]="property.Nodes[1]"
>
</node-widget>
</ng-template>
<ng-container *ngFor="let property of lefties(Properties); let index = index">
<ng-container [ngSwitch]="index">
<node-widget *ngSwitchCase="0"
[property]="property.Nodes[1]"
>
</node-widget>
<ng-container *ngSwitchDefault>
<ng-container *ngTemplateOutlet="prop;context:{property: property}">
</ng-container>
</ng-container>
</ng-container>
</ng-container>
Шаблон ng перерабатывается в другом месте шаблона, поэтому я не могу поместить его ближе к ngSwitch (по существу, внутри * ngFor). Я попытался заменить весь объект ngSwitch на * ngIf, но затем шаблон prop пожаловался, что у него не определено [свойство]. Предложения? Я что-то упустил?