常见菜单使用案例
<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 和menu
组件*ngIf
状态中。即使菜单从未打开过,它们的OnInit
和钩子也会被调用,并且即使从 DOM 中真正添加-删除也不会触发。这是关于此https://github.com/angular/angular/issues/13921的已关闭问题(有一个带有示例的 plnkr)和角度文档的问题https://github.com/angular/angular.io/问题/3099。AfterViewInit
OnDestroy
但是这个问题仍然存在 - 我怎么能这样做才能使菜单项仅在菜单打开时才被实例化,如果关闭则正确销毁?所有钩子都应该只与真实的 DOM 状态相关。