2015-02-06 53 views
0

我有一個很大的AngularJS應用程序,我通過將不同的關鍵功能分配到他們自己的模塊中進行組織。例如,我有兩個模塊叫做「myApp.Alerts」和「myApp.Header」。

「myApp.Alerts」包含工廠,一些指令和控制器,用於管理我的應用程序中的「警報」頁面。

「myApp.Header」也是一個包含指令和控制器的模塊,用於管理我的應用程序的標題。

現在在我的頭文件中,我希望有一些與Alert相關的功能(基本上推送像Facebook或Twitter的通知),所以如果用戶使用Alerts更改頁面上的某些內容,那麼它也會在頭文件中更新。

我 「myApp.Header」 使用DI與

angular.module('myApp.Header', ['myApp.Alerts'])

我在 「myApp.Alerts」 來獲得使用工廠獲得 「myApp.Alerts」,POST,PUT,DELETE警報。當這些操作之一完成時,例如DELETE Alert,我試圖使用事件來觸發「myApp.Header」以更新。

因此,如果撥打電話MyAlertsFactory.deleteAlert(alert)然後我做一些像$rootScope.$broadcast('updateAlert:delete'),然後在我的頭我有一個指令,有$scope.$on('updateAlert:delete')

問題是事件從來沒有被我的聽衆處理過。經過一些調試後,我意識到我的兩個模塊每個都實例化了我工廠的不同版本。而不是作爲應用程序整個生命週期中共享的單身人士,有2個不同的單身人士..一個是與「myApp.Header」和其他「myApp.Alerts」控制器。這會導致事件從不觸發正確的服務。

是否有正確的方式將模塊「鏈接」在一起,以便共享相同的$ rootScope和其他因子,服務,提供者等?

回答

0

這不是你一般應該做的事情,最好是考慮爲什麼你需要以這種方式彼此溝通的獨立模塊。

雖然,這裏是一個解決方案的草圖:

具有存儲每個模塊rootScope的窗口元素,這是在您的app.run塊更​​新。

在要推送到其他模塊的應用程序中編寫用於在rootScope上觸發事件的封裝器。這個包裝函數在每個rootScope上執行事件並在每個上調用摘要。你不能忘記調用摘要。

相關問題