我目前正在尝试使用$ rootScope。$广播方法来触发我的angularjs服务中的事件。为此,我创建了一个负责触发事件的服务,并设置了不同的服务来提取事件。重要的是,提取事件的服务应该独立于应用程序的其余部分,这就是为什么我采用共享服务方法。角度广播不与独立服务
我的广播服务(共享),它被调用我的应用程序触发事件:
angular.module('myModule')
.factory('phaseListener', ['$log', '$rootScope', function ($log, $rootScope) {
var phaseListener= {};
phaseListener.broadcastPhase = function(phase) {
$rootScope.$broadcast('test');
};
return phaseListener;
}]);
以下服务“TestService的”我听着这个事件,但它不会被触发。我从另一个服务调用broadcastPhase()方法,并触发该方法。
angular.module('myModule')
.factory('testService', [ '$rootScope', '$scope', '$log', 'phaseListener',
function ($rootScope, $scope, $log, phaseListener) {
$rootScope.$on('test', function() {
$log.debug('This works');
});
}]);
如果我正在侦听当前加载的控制器中的事件,它会起作用。但我的目标是触发当前未加载的其他控制器/服务中的事件(至少在页面上不可见)。通过将phaseListener定义为testService的依赖项,我希望它能够在后台加载。
如何通过定义依赖关系来实现此通信?我无法将testService定义为phaseListener的依赖项。 testService是一个模块的例子,它可以单独编码,并且可以很容易地与我的应用程序集成。
依赖关系: 服务1 => SharedService < =服务2
消息: 服务1 => SharedService =>服务2
由于这些控制器/服务未加载,因此'$ on'侦听器也未加载。所以这将永远不会工作。你必须确保服务或控制器功能已经运行,你希望他们'听'这些事件。 – RoryKoehein 2014-09-01 18:06:30
如果我无法在我的phaseListener服务中添加依赖项,我该如何做到最好? – jimmy 2014-09-01 19:00:22
就个人而言,我会使用UI路由器来改变应用程序的'状态',一旦某个事件被触发。状态可以与控制器/服务/模板结合使用。 https://github.com/angular-ui/ui-router – RoryKoehein 2014-09-01 19:03:54