2015-02-06 96 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上执行事件并在每个上调用摘要。你不能忘记调用摘要。

相关问题