我无法弄清楚角度何时决定调用 onDestory 事件?
当我使用*ngIF
指令切换组件时,未调用onDestory并且维护组件的状态,就像它使用组件的相同实例一样?
任何人都可以详细说明角度(2)何时会破坏组件?以及在使用*ngIf
切换时如何实现组件的新实例?
答案 0 :(得分:1)
Angular中的大多数DOM操作都是使用ViewContainerRef执行的。特别是,这个机制is used internally由ngIf
:
private _updateView() {
...
this._viewContainer.clear();
...
this._thenViewRef =
this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
}
}
@Directive({selector: 'router-outlet', exportAs: 'outlet'})
export class RouterOutlet implements OnDestroy, OnInit {
constructor(..., private location: ViewContainerRef, ...)
detach(): ComponentRef<any> {
...
this.location.detach();
...
}
attach(ref: ComponentRef<any>, activatedRoute: ActivatedRoute) {
...
this.location.insert(ref.hostView);
}
无论何时调用viewContainer.clear()
或viewContainer.remove(index)
方法,都会删除相关组件或嵌入视图(使用ng-template
创建),并在其上调用ngOnDestroy
生命周期挂钩。< / p>
任何人都可以详细说明角度(2)何时会破坏组件?
当使用结构指令(例如ngIf
和ngFor
)时,当路由器导航离开当前router-outlet
指令或使用{{1}手动删除动态组件或嵌入视图时,会发生这种情况}。
您可以在
中使用viewContainerRef
了解有关DOM操作的更多信息