我有一個在組件中提供的服務,所以如果該組件將被銷毀,它就會運行ngOnDestory。每個訂閱都通過takeUntil(this.destory$)(它在組件的ngOnDestory鉤上發射)或通過async管道運行,所以當組件被銷毀時,所有東西都被取消訂閱。
問題是,如果我在服務中擁有一個BehaviorSubject,我是否應該在服務的.complete()和/或.unsubscribe()方法中運行其ngOnDestory,或者我可以像現在這樣運行?
uj5u.com熱心網友回復:
是的,你應該在ngOnDestroy上取消訂閱;如果是在服務內部,不一定要完成主題,因為其他組件可能仍然在使用主題,仍然需要它來正常作業。
服務是單子,但其生命周期取決于提供它們的注入器。如果您的服務是在根注入器中提供的,那么它的壽命與您的應用程式一樣長,所以當您再次創建需要該主題的組件時,如果不進行某種重新初始化,您將無法重用它。
你提到你有takeUntil(this.destroy$),這應該不會導致記憶體泄漏,但是請確保在你的ngOnDestroy中對this.destroy$也呼叫complete。
ngOnDestroy() {
this.destroy$.next()。
this.destroy$.complete()。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307499.html
標籤:
上一篇:如何將單選按鈕改為div?
