【问题标题】:how to broadcast and emit events to other controllers in angular that have no parent-child relationship如何以没有父子关系的角度向其他控制器广播和发出事件
【发布时间】:2015-01-17 00:46:10
【问题描述】:

我正在尝试从这篇文章中获得提示 - Working with $scope.$emit and $scope.$on,但当控制器之间没有任何关联时,似乎没有任何效果。

那是——

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

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

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

$rootScope.$broadcast('userHasLoggedIn', {})

在 CtrlA 中我会这样听:

$rootScope.$on('userHasLoggedIn, function(event, data){});

不 - CtrlA 永远不会收到广播事件,除非我将 CtrlB div 嵌套在 CtrlA div 中

有什么想法吗?

【问题讨论】:

  • $broadcast 发生时可能没有加载 CtrlA。
  • 在 CtrlA 中你应该做 $scope.$on 因为 $scope 是来自 $rootScope 的子范围
  • @Chandermani CtrlA 肯定已加载,我发出警报并触发它。 Joao - 那也行不通。但你是说它应该可以工作吗?
  • 您的代码应该可以正常工作。这是working demo。下次先创建 jsfiddle/codepen 以更好地展示您的问题。
  • @David:你确定在广播发生之前加载了CtrlA吗?看起来你的代码应该可以工作。

标签: angularjs angular-services angular-broadcast


【解决方案1】:

在不知道您尝试了什么的情况下很难回答。请参阅此 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';
});

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2015-08-20
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多