Angularjs 如何使用$on和$broadcast调用另一个模块中的服务
我试着用angular的$broadcast从a工厂打电话到B工厂。这两个工厂在单独的模块中定义。。下面是尝试执行此操作的代码Angularjs 如何使用$on和$broadcast调用另一个模块中的服务,angularjs,Angularjs,我试着用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('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!');
};
});
您应该使用
$rootScope.$emit()
而不是$rootScope.$broadcast()
因为$rootScope.$broadcast()
将向下发送
编辑:
制作了一个示例代码以测试发射/广播/基于角度导向:
结果表明,使用$rootScope.$on
侦听事件将由$rootScope.$emit
和$rootScope.$broadcast
触发。区别在于,$broadcast
将向下调度,因此所有作用域也将接收事件
因此,如果您只想通知$rootScope
,只需使用$rootScope.$emit
<代码>$rootScope.$broadcast将浪费资源
希望这会有帮助 不幸的是,您无法使用广播/on进行跨模块通信。它们只是在作用域中运行,直到$rootScope,每个模块都有自己独特的$rootScope。谢谢Zack Argle,你建议我如何实现这种跨模块通信?我会尝试使用一个酒吧子服务,也许可以给你一些想法;)跨模块通信的唯一方法是将依赖项注入到另一个模块中。感谢李杰的快速回答,但它仍然不起作用。请检查此处的代码笔:您不能跨模块通话。$rootScopes是不同的,因此事件永远不会彼此到达。@ZackArgyle请参考我的更新。同样来自angular文档:
每个angular应用程序都有一个根作用域,但可能有几个子作用域
。