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

时间:2014-11-05 00:18:36

标签: 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('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 个答案:

答案 0 :(得分:2)

您应该使用$rootScope.$emit()代替$rootScope.$broadcast()

因为$rootScope.$broadcast()将向下发送。

修改

根据Angular指南制作示例代码以测试emit / broadcast /:Plunker

事实证明$rootScope.$on$rootScope.$emit会触发使用$rootScope.$broadcast监听事件。差异是$broadcast将向下发送,因此所有范围也将收到该事件。

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

希望它会有所帮助。