2017-11-23 4 views
1

角度がのonDestoryイベントに電話することをいつ決定するのですか? ディレクティブでコンポーネントを切り替えると、onDestoryは呼び出されず、コンポーネントの同じインスタンスを使用しているかのようにコンポーネントの状態が維持されますか?角度2はコンポーネントに対してonDestroyを呼び出しますか?

angle(2)がコンポーネントを破棄するとき、誰が手直しできますか? *ngIfで切り替えるときにコンポーネントの新しいインスタンスを実現する方法は?

+0

コンポーネントをトグルする際に、イベントエミッタを見て、新しいコンポーネントをうまく切り替えるようにコンポーネントをネストする必要があるかもしれません。 –

+0

@ RahulSingh、ドキュメント参照はどこかにありますか?これについて何か参考までに見つけるのは難しいです。 –

+0

https://angular.io/guide/lifecycle-hooks – ranakrunal9

答えて

1

AngularでのDOM操作のほとんどは、ViewContainerRefを使用して実行されます。具体的には、この機構ngIfによってis used internally

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ライフサイクルされるかたびフックが呼び出されます。

angle(2)がコンポーネントを破棄するとき、誰もが精緻化できますか?

ngIfngForのような構造のディレクティブを使用する場合は、ルータが離れて現在のrouter-outletディレクティブとき、または手動で動的コンポーネントまたはviewContainerRefを使用して埋め込まれたビューを削除するから移動したときに、発生します。

あなたがでViewContainerRefを使用してDOM操作についての詳細を読むことができます:あなたはルートを変更したりも、あなたがの新しいインスタンスをしたい場合は、コンポーネントのonDestroyが呼び出されたセッションを閉じる史上とき

関連する問題