我在一个简单的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");
});
});
有没有办法使用事件在同一级别的两个控制器之间实现直接通信?
如果不是什么是促进沟通的最佳方式?
答案 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