我有一項服務 - 讓我們打電話給 ServiceA,
這會進行多次 HTTP 呼叫,我想在計算所有內容時檢索資訊。為此,我有一個布爾變數 - isEverythingProcessed,當發生這種情況時。
在我的組件上 - 讓我們呼叫 ComponentB,
我正在做:
ngOnCheck(){
if(this.serviceA.isEverythingProcessed){
//dostuff
}
}
這有效,但它被呼叫了數百次。對此有任何替代方案,我的意思是在組件檢測服務變數何時更改時實作生命周期?
uj5u.com熱心網友回復:
您可以使用 rxjs 創建即將更新的 onInit 值的 observable,并訂閱更改。這是我看到它完成的方式。雖然,如果某些東西有效并且沒有嚴重的性能影響(一個優化的 fn 呼叫,即使它被呼叫了幾百次,也不是很糟糕,雖然不是很理想),但我不會過度設計它。
uj5u.com熱心網友回復:
ASubject在這里可能就足夠了,因為您的組件正在偵聽更改。例如,當有偵聽器時 BehaviorSubject 將始終發出,但您可能只想在它發出時收聽,確切地說是在它發出時。因此,在服務中創建一個主題而不是布爾變數,在組件中訂閱它并在主題發出時發揮你的魔力。記得在組件銷毀時取消訂閱!
所以我建議以下
服務:
isEverythingProcessed = new Subject<boolean>();
完成所有計算后,呼叫next()它:
this.isEverythingProcessed.next(true)
和組件:
this.service.isEverythingProcessed.subscribe((bool: boolean) => {
// do stuff!
})
STACKBLITZ 演示
如果您需要一個初始值并始終觸發,我建議使用一個BehaviorSubject代替Subject.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379934.html
上一篇:Angular:使用routerLink獲取絕對路徑
下一篇:通過用戶界面創建一個小時的物件
