两个兄弟AngularJS控制器如何使用事件相互通信?

时间:2014-10-28 06:25:27

标签: angularjs

我在一个简单的AngularJS应用程序中有两个控制器,需要在彼此之间传递数据。

我正在尝试使用事件来执行此通信。我已经尝试使用$ scope。$ emit和$ scope。$ broadcast来触发更改和$ scope。$ on来消耗事件。

通过$ broadcast或$ emit广播事件似乎不会导致生成的$ on方法被触发

示例,非工作,我想要实现的目标如下。

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

     app.controller('TaskCtrl', function ($scope) {
      $scope.setSelected = function (idSelectedVote) {
          $scope.$broadcast("taskRowSelected");
      };  
    });

    app.controller('WorkRecordCtrl', function ($scope) {
        $scope.$on('taskRowSelected', function (event, data) {
            console.log(data); // 'Data to send'
            console.log("Some Data");
        });

    });

有没有办法使用事件在同一级别的两个控制器之间实现直接通信?

如果不是什么是促进沟通的最佳方式?

2 个答案:

答案 0 :(得分:2)

我不认为服务会在这种情况下帮助你。据我了解,您希望控制器A在选择行时告诉控制器B,让控制器B处理与此相关的一些数据。服务可以从控制器A接收数据并让控制器B访问相同的数据,但是控制器B不知道何时更新该数据。在控制器B中,您必须获取数据,将其放在$ scope上并观察数据以进行更改。它不是很优雅,这种状态变化处理是Angular的一个问题。 Angular在UI中反映状态更新非常有效,但是当你想以其他方式对状态变化做出反应时...就像这里......这是一个问题。

我写了一篇关于如何在Angular JS中使用FLUX架构的文章,它可以帮助您处理这些情况:http://christianalfoni.github.io/javascript/2014/09/26/using-flux-with-angular.html

它可能会帮助你,至少给你一些意见: - )

答案 1 :(得分:0)

要实现这一目标,您可以使用$rootScope,但我认为这不是最佳做法,这就是我更喜欢使用Service的原因。但如果您想要完全正确的事件,请使用$rootSCope