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



我在一个简单的AngularJS应用程序中有两个控制器,它们需要在彼此之间进行数据通信。

我正在尝试使用事件来执行此通信。我已经尝试使用这两个$scope$emit和$scope$广播以触发更改和$scope$上消费事件。

通过$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");
        });
    });

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

如果没有,促进沟通的最佳方式是什么?

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

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

它可能会帮你,至少会给你一些输入:-)

为了实现这一点,您可以使用$rootScope,但我认为这不是最佳实践,这就是为什么我更喜欢使用Service。但是,如果您想要确切的事件,则使用$rootSCope

最新更新