AngularJS $广播 $on
AngularJS $broadcast $on
我最近开始学习AngularJS。所以,我尝试从一个控制器向另一个控制器发送消息。我看了很多例子,我的代码也很相似,但是不起作用。
为什么 $rootScope.$on 不起作用?
有人可以帮助我吗?
HTML:
<div ng-controller="Ctrl">
{{message}}
<div ng-controller="Ctrl1">
<p>Ctrl1</p>
{{test}}
</div>
</div>
Ctrl:
angular
.module("app")
.controller("Ctrl",["$rootScope","$scope",Ctrl]);
function Ctrl($rootScope,$scope){
var test = "Bla bla bla!";
$scope.message = test;
$rootScope.$broadcast('aaa', test);
}
Ctrl1:
angular
.module("app")
.controller("Ctrl1",["$rootScope","$scope", Ctrl1]);
function Ctrl1($rootScope, $scope){
$rootScope.$on('aaa', function(event, args){
console.log("This message don't appear!");
$scope.test=args;
});
}
它不会工作,因为父控制器 Ctrl
将在 Ctrl1
控制器加载之前获得注册。因此,虽然 $broadcast
事件内部控制器 Ctrl1
事件监听器尚未注册。
您可以通过将事件的 $broadcast 包装在父控制器的 $timeout 函数中来使其工作。所以它将等待在下一个摘要周期中得到评估。
$timeout(function(){
$rootScope.$broadcast('aaa', test);
})
我最近开始学习AngularJS。所以,我尝试从一个控制器向另一个控制器发送消息。我看了很多例子,我的代码也很相似,但是不起作用。 为什么 $rootScope.$on 不起作用? 有人可以帮助我吗?
HTML:
<div ng-controller="Ctrl">
{{message}}
<div ng-controller="Ctrl1">
<p>Ctrl1</p>
{{test}}
</div>
</div>
Ctrl:
angular
.module("app")
.controller("Ctrl",["$rootScope","$scope",Ctrl]);
function Ctrl($rootScope,$scope){
var test = "Bla bla bla!";
$scope.message = test;
$rootScope.$broadcast('aaa', test);
}
Ctrl1:
angular
.module("app")
.controller("Ctrl1",["$rootScope","$scope", Ctrl1]);
function Ctrl1($rootScope, $scope){
$rootScope.$on('aaa', function(event, args){
console.log("This message don't appear!");
$scope.test=args;
});
}
它不会工作,因为父控制器 Ctrl
将在 Ctrl1
控制器加载之前获得注册。因此,虽然 $broadcast
事件内部控制器 Ctrl1
事件监听器尚未注册。
您可以通过将事件的 $broadcast 包装在父控制器的 $timeout 函数中来使其工作。所以它将等待在下一个摘要周期中得到评估。
$timeout(function(){
$rootScope.$broadcast('aaa', test);
})