angularjs – 如何使用$on和$broadcast在另一个模块中调用服务

我正在尝试使用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()将向下发送.

编辑:

根据Angular guide:Plunker制作了一个示例代码来测试emit / broadcast /.

事实证明,使用$rootScope.$on来监听事件将由$rootScope.$emit和$rootScope.$broadcast触发.区别在于$broadcast将向下发送,因此所有范围也将收到该事件.

因此,如果您只想通知$rootScope,只需使用$rootScope.$emit. $rootScope.$broadcast将浪费资源.

希望它会有所帮助.

点赞