Я столкнулся со странной ошибкой с ng-content
, завернутым в ng-template
.
Допустим, у меня есть компонент inner-component
, который я отображаю в outer-component
:
<ng-container *ngIf="condition" [ngTemplateOutlet]="test"></ng-container>
<ng-template #test>
<inner-component></inner-component>
</ng-template>
Если condition=false
, то, как и ожидалось, мой inner-component
никогда не создается Angular (при отладке никогда не вызывается ngOnInit()
).
Теперь, если вместо этого у меня есть внешний компонент:
<ng-container *ngIf="condition" [ngTemplateOutlet]="test"></ng-container>
<ng-template #test>
<ng-content></ng-content>
</ng-template>
и, все еще с condition=false
, я пишу:
<outer-component>
<inner-component></inner-component>
</outer-component>
Затем, к моему удивлению, создается inner-component
, даже если он никогда не визуализируется. Это проблема для меня, потому что внутренний компонент (сторонний компонент, который я не могу изменить) действительно необходимо создавать при его отображении в приложении.
Можете ли вы придумать обходной путь, который я мог бы использовать для внешнего компонента, чтобы избежать создания ng-контента (очевидно, все еще используя трансклюзию - первое решение не вариант).
inner
был инициализирован снаружи внешнего, а внутри шаблонаouter-component
с использованием условного выражения вокругng-content
. - person hyperdrive   schedule 09.09.2020