Общий случай использования меню
<menu>
<menu-item1></menu-item1>
<menu-item2></menu-item2>
<menu-item3></menu-item3>
</menu>
шаблон меню
<div *ngIf="open$ | async">
<ng-content></ng-content>
</div>
Я был удивлен, узнав, что все компоненты menu-item*
(и все их дочерние элементы) будут созданы, несмотря на их присутствие в DOM и состояние *ngIf
компонента menu
. Их хуки OnInit
и AfterViewInit
будут вызываться, даже если меню никогда не открывалось, а OnDestroy
никогда не сработает, несмотря на реальное добавление-удаление из DOM. Вот закрытая проблема об этом https://github.com/angular/angular/issues/13921 (есть plnkr с примером) и вопрос к документации angular https://github.com/angular/angular.io/issues/3099.
Но эта проблема все еще здесь - как я могу сделать так, чтобы элементы меню создавались только при открытии меню и должным образом уничтожались при закрытии? Все хуки должны срабатывать только в связи с реальным состоянием DOM.