我有一个很大的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和其他因子,服务,提供者等?