我目前正在嘗試使用$ 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