如何以角度没有父子关系的方式向其他控制器广播和发送事件

Dav*_*vid 0 angularjs angular-services angular-broadcast

我试图从这篇文章中获得提示 - 使用$ scope.$ emit和$ scope.$ on 但是当控制器彼此无关时,似乎没有任何工作.

那是 -

<div ng-controller="CtrlA">
</div>

<div ng-controller="CtrlB">
</div>
Run Code Online (Sandbox Code Playgroud)

在CtrlB中我会做这样的事情:

$rootScope.$broadcast('userHasLoggedIn', {})
Run Code Online (Sandbox Code Playgroud)

在CtrlA中,我会这样听:

$rootScope.$on('userHasLoggedIn, function(event, data){});
Run Code Online (Sandbox Code Playgroud)

并且没有 - 除非我在CtrlA div中嵌入CtrlB div,否则CtrlA永远不会收到广播事件

任何的想法?

Joa*_*eal 5

如果不知道你的尝试,很难回答.请看这个plnkr:http://plnkr.co/edit/hYzWOrgEyPLlCMZnDCo2?p = preview

我基本上创建了两个控制器,一个向另一个发送一些文本:

app.controller('CtrlA', function($scope, $rootScope) {
  $scope.submit = function(){
    $rootScope.$broadcast('userHasLoggedIn', $scope.input);
  }

});

app.controller('CtrlB', function($scope) {
  $scope.$on('userHasLoggedIn', function(event, data){
    $scope.data = data; 
  });

  $scope.data = 'nothing';
});
Run Code Online (Sandbox Code Playgroud)