Как уже отмечалось, это невозможно. Одна вещь, которую можно использовать, по крайней мере, для предотвращения дублирования ng-template
. Это позволяет извлекать содержимое элемента, затронутого ngIf
ветвлением.
Если вы, например, хотите создать компонент иерархического меню с использованием Angular Material:
<!-- Button contents -->
<ng-template #contentTemplate>
<mat-icon *ngIf="item.icon != null">{{ item.icon }}</mat-icon>
{{ item.label }}
</ng-template>
<!-- Leaf button -->
<button *ngIf="item.children == null" mat-menu-item
(click)="executeCommand()"
[disabled]="enabled == false">
<ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
</button>
<!-- Node button -->
<ng-container *ngIf="item.children != null">
<button mat-menu-item
[matMenuTriggerFor]="subMenu">
<ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
</button>
<mat-menu #subMenu="matMenu">
<menu-item *ngFor="let child of item.children" [item]="child"></menu-item>
</mat-menu>
</ng-container>
Здесь условно применяется директива matMenuTriggerFor
, которая должна применяться только к пунктам меню с дочерними элементами. Содержимое кнопки вставляется в оба места через ngTemplateOutlet
.