簡體   English   中英

覆蓋ngOnDestroy

[英]Override ngOnDestroy

有什么解決方案可以在調用ngOnDestroy時完成可觀察性的工作? 我的意思是,當您只有一個組件實例時,創建新的子組件對我來說不是解決方案。 我試圖通過更改組件原型中的函數來覆蓋ngOnDestroy,但似乎角度收集了ngOnDestroy函數,而根本沒有使用更改過的方法。

我個人使用了這段方便的代碼https://github.com/NetanelBasal/ngx-take-until-destroy我已經做了一些研究,說實話,這種方法是我能找到的最優雅的方法

另外,您也不必取消訂閱,例如,通過使用諸如take takeUntil等運算符take確保可觀察的內容完整

如果要動態創建組件,則始終可以僅將組件實例而不是“ this” untilDestroyeduntilDestroyed運算符中

我喜歡將一個主題僅僅用於破壞。 在ngOnDestroy中,我觸發next()和complete();

public destroy$ = new Subject<void>();

somesource$.pipe(
   takeUntil(this.destroy$)
).subscribe(val => //somemething here);

ngOnDestroy():void {
   this.destroy$.next();
   this.destroy$.complete();
}

您可以在組件外部使用destroy $變量來查看組件是否被破壞。

someInstanceComponent.destroy$.subscribe(val => //do something);

大多數時候,我將其設為私有,因為我很少在室外使用它。

ngOnDestroy是接口,因此您可以一直覆蓋它...您想在ngOndestroy中完成從未完成的源代碼嗎? 您可以使用takeWhile並傳遞一個布爾值

// variables section
flag = true;

// somewhere when you want to subscribe
source$
  .pipe(takeWhile(flag)).subscribe(()=>{});

ngDestroy(){
flag = false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM