2014-11-05 27 views
2

我試圖使用angular的$ broadcast從工廠A調用到工廠B.這兩個工廠在單獨的模塊中定義..下面是試圖做到這一點的代碼。

angular.module('secondApp', []) 
    .service('B', function($rootScope, $scope) { 
    $rootScope.$on('test', function(event, data) { 
     console.log(event, data); 
    }); 
}); 

var app = angular.module('firstApp', ['secondApp']); 

app.controller('MainCtrl', function($scope, A) { 
    $scope.test = function() { 
     A.test(); 
    }; 
}); 

app.service('A', function($rootScope) { 
    this.test = function() { 
     $rootScope.$broadcast('test', 'Hello from service A!'); 
    }; 
}); 
+1

您不幸無法使用broadcast/on進行交叉模塊通信。他們只需運行整個範圍,直到$ rootScope,並且每個模塊都有自己獨特的$ rootScope。 – 2014-11-05 00:36:15

+0

謝謝Zack Argle,你如何建議我應該去實現這種跨模塊通信? – user2893858 2014-11-05 09:53:11

+0

我會嘗試一個pub-sub服務,也許[this](https://github.com/glepretre/angular-pubsub)可以給你一些想法;) – glepretre 2014-11-05 09:57:12

回答

1

您應該使用$rootScope.$emit(),而不是$rootScope.$broadcast()

因爲$rootScope.$broadcast()會向下發送。

編輯:

製備的樣品代碼測試發射/廣播/上基座上角指南:Plunker

原來,使用$rootScope.$on來監聽事件將由$rootScope.$emit$rootScope.$broadcast觸發。所不同的是$broadcast將向下派發,因此所有範圍也將收到該事件。

所以,如果你只是想通知$rootScope,只需使用$rootScope.$emit$rootScope.$broadcast會浪費資源。

希望它會有所幫助。

+0

感謝您快速回答J.C Li,但它仍然無法正常工作。請檢查codepen在這裏:http://codepen.io/anon/pen/lvECf – user2893858 2014-11-05 09:13:57

+0

你不能交談模塊。 $ rootScopes是不同的,所以事件永遠不會到達彼此。 – 2014-11-05 18:00:09

+0

@ZackArgyle請參閱我的更新。同樣來自角度文檔:'每個Angular應用程序只有一個根範圍,但可能有多個子範圍'。 – 2014-11-06 02:49:51

相關問題