Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用$on和$broadcast调用另一个模块中的服务_Angularjs - Fatal编程技术网

Angularjs 如何使用$on和$broadcast调用另一个模块中的服务

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的$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!');
    };
});

您应该使用
$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应用程序都有一个根作用域,但可能有几个子作用域