我最近开始学习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;
});
}发布于 2016-02-17 17:43:32
它将无法工作,因为父控制器Ctrl将在加载Ctrl1控制器之前获得注册。因此,虽然$broadcast事件内部控制器Ctrl1 listner事件尚未注册。
您可以通过将事件的$broadcast包装到父控制器的$timeout函数中来使其工作。因此,它将等待得到评估在下一个消化周期。
$timeout(function(){
$rootScope.$broadcast('aaa', test);
})Demo Here
https://stackoverflow.com/questions/35463885
复制相似问题