$ rootScope。$ on广播后没有被调用

时间:2014-06-04 10:21:18

标签: angularjs

我有两个控制器,想要通知一个控制器某个事件发生在另一个控制器上。为此,我试图使用角度广播,但一直没有成功。请在下面找到我的代码:

firstController.js

 $rootScope.$on('xyz',function(){
    alert('Called');
 });

secondController.js

  $rootScope.$broadcast('xyz');

有人可以帮助确定我在这里缺少的东西吗?

3 个答案:

答案 0 :(得分:1)

使用以下组合:

$rootScope.$broadcast();
$scope.$on();

// or

$rootScope.$emit();
$rootScope.$on();

$broadcast将事件向下调度到所有子范围,因此您可以使用$scope服务收听该事件。

但是,$emit通过范围层次结构向上调度,并且由于$rootScope是最高级别,因此您可以使用$rootScope来调度和侦听同一事件。这在性能方面也要好得多,因为事件不会向下传播到多个范围。

答案 1 :(得分:1)

请在这里查看:jsfiddle

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

app.controller('c1', function($rootScope, $scope){

    $scope.click = function() {
         $rootScope.$broadcast('xyz');
    }
});

app.controller('c2', function($scope){

   $scope.$on('xyz', function(){

    alert("clicked");
    });

})

答案 2 :(得分:0)

firstController.js中的

使用$ scope而不是$ rootScope

$scope.$on('xyz', function(event, args) {

   alert('Called')
});