我有两个控制器,想要通知一个控制器某个事件发生在另一个控制器上。为此,我试图使用角度广播,但一直没有成功。请在下面找到我的代码:
firstController.js
$rootScope.$on('xyz',function(){
alert('Called');
});
secondController.js
$rootScope.$broadcast('xyz');
有人可以帮助确定我在这里缺少的东西吗?
答案 0 :(得分:1)
使用以下组合:
$rootScope.$broadcast();
$scope.$on();
// or
$rootScope.$emit();
$rootScope.$on();
$broadcast
将事件向下调度到所有子范围,因此您可以使用$scope
服务收听该事件。
但是,$emit
通过范围层次结构向上调度,并且由于$rootScope
是最高级别,因此您可以使用$rootScope
来调度和侦听同一事件。这在性能方面也要好得多,因为事件不会向下传播到多个范围。
答案 1 :(得分:1)
请在这里查看:jsfiddle
var app = angular.module('app', []);
app.controller('c1', function($rootScope, $scope){
$scope.click = function() {
$rootScope.$broadcast('xyz');
}
});
app.controller('c2', function($scope){
$scope.$on('xyz', function(){
alert("clicked");
});
})
答案 2 :(得分:0)
使用$ scope而不是$ rootScope
$scope.$on('xyz', function(event, args) {
alert('Called')
});