我有一個統計應用程序。在我的頁面左側,我有主題列表,位於組頂部列表中。主要部分包含與主題和組相關的統計項目。角度跨服務溝通
另外我有幾個服務爲我的應用程序提供業務邏輯。爲了簡單起見,我們來談談其中三個:ThemeSerivce,GroupService和StatisticsService。
最終用戶可以操作主題和組列表(添加或刪除項目),每次更改後我都必須重新計算統計信息。在這個應用程序中,我使用受試者和Subsubption from rx.js來跟蹤這種變化。
所以,在我的組件我可以寫這樣的事:
爲GroupComponent
removeGroup() {
this.groupService.removeGroup(this.group);
this.statisticsService.updateStatistics();
}
爲ThemeComponent
removeTheme() {
this.themeService.removeTheme(this.theme);
this.statisticsService.updateStatistics();
}
但在邏輯上,這些組件沒有了解統計信息。當然,我可以移動的依賴StatisticsService到ThemeService和GroupService,但我將不得不調用statisticsService.updateStatistics()每從而改變主題或者組的收集方法。這就是爲什麼我想通過訂閱實現直接跨服務通信的原因。
最後我的問題:
這是個好主意呢?
如果沒關係,實現它的最好方法是什麼? 當我使用認購在分量I註冊它在ngOnInit()方法和ngOnDestroy()退訂防止內存泄漏。 我可以在服務的構造函數中訂閱它嗎?何時何地我應該取消訂閱?或者,當我在App模塊級別註冊我的服務作爲提供者時,可能沒有必要?