angular 2何时在组件上调用onDestroy?

时间:2017-11-23 04:26:26

标签: javascript angular

我无法弄清楚角度何时决定调用 onDestory 事件?

当我使用*ngIF指令切换组件时,未调用onDestory并且维护组件的状态,就像它使用组件的相同实例一样?

任何人都可以详细说明角度(2)何时会破坏组件?以及在使用*ngIf切换时如何实现组件的新实例?

1 个答案:

答案 0 :(得分:1)

Angular中的大多数DOM操作都是使用ViewContainerRef执行的。特别是,这个机制is used internallyngIf

组成
private _updateView() {
    ...
    this._viewContainer.clear();
    ...
      this._thenViewRef =
          this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
    }
  }

router-outlet

@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)何时会破坏组件?

当使用结构指令(例如ngIfngFor)时,当路由器导航离开当前router-outlet指令或使用{{1}手动删除动态组件或嵌入视图时,会发生这种情况}。

您可以在

中使用viewContainerRef了解有关DOM操作的更多信息