Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个同级AngularJS控制器如何使用事件相互通信?_Angularjs - Fatal编程技术网

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

两个同级AngularJS控制器如何使用事件相互通信?,angularjs,Angularjs,我在一个简单的AngularJS应用程序中有两个控制器,需要在彼此之间进行数据通信 我正在尝试使用事件来执行此通信。我尝试使用$scope.$emit和$scope.$broadcast触发更改,使用$scope.$on消费事件 通过$broadcast或$emit广播事件似乎不会导致触发生成的$on方法 下面是我试图实现的非工作性示例 var app = angular.module('angular-app', []); app.controller('TaskCtrl'

我在一个简单的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");
        });

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


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

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

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

我写了一篇关于如何将FLUX架构与Angular JS结合使用的文章,它可以帮助您处理以下情况:


它可能会帮你解决问题,至少会给你一些建议:-)

你有什么理由不能使用服务吗?@NoahMatisoff在这种情况下你会如何使用服务?我是一个相对的AngularJs新手,所以不确定一个服务是否是解决这种情况的一个明显的解决方案。我发现了这篇文章,描述了如何按照建议使用一个服务。这似乎提供了我想要的行为。从我所看到的C#events样式中没有任何一种能够巧妙地提供事件机制。我不使用服务的唯一原因是为了避免另一个HTTP请求。如果不是HTTP请求,请找到一种使用该服务的方法,并将其注入到任何地方。这就是服务之美。谢谢,这篇文章是一个有趣的起点。在AngularJS中似乎没有明显的解决方案。我必须更详细地了解基于通量的解决方案。然而,对于在UI元素之间传递消息的问题,它似乎是一个相当复杂的解决方案。是的,它完全可以这样感觉:-)不过,FLUX是一个解决多个问题的架构。。。其中包括你目前的问题。因此,仅仅为了解决您当前的挑战,有点需要接受,但如果您需要一个良好的可扩展体系结构用于项目,一个让您实现新控制器而不必担心现有控制器如何连接的体系结构,这是一个非常好的方法。至少根据我的经验:-)Narek在这种情况下,您将如何使用服务。如上所述,我是AngularJS新手,因此不确定这是否是一个明显的解决方案。这就是为什么我写了一篇文章,如果它能满足您的需求,那么使用$rootScope或更优的解决方案创建第三个控制器,并将您的两个控制器放在其中