Javascript AngularJS$broadcast$on

Javascript AngularJS$broadcast$on,javascript,angularjs,broadcasting,Javascript,Angularjs,Broadcasting,我最近开始学习AngularJS。因此,我尝试从一个控制器向另一个控制器发送消息。我看到了很多例子,我的代码也是类似的,但不起作用。 为什么$rootScope.$on不起作用? 有人能帮我吗 HTML: Ctrl1: angular .module("app") .controller("Ctrl1",["$rootScope","$scope", Ctrl1]); function Ctrl1($rootScope, $scope){ $rootScope.$o

我最近开始学习AngularJS。因此,我尝试从一个控制器向另一个控制器发送消息。我看到了很多例子,我的代码也是类似的,但不起作用。 为什么$rootScope.$on不起作用? 有人能帮我吗

HTML:

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
控制器加载之前获得寄存器。所以,虽然事件内部控制器Trl1还没有注册,但事件上的listner还没有注册

您可以通过将事件的$broadcast包装在父控制器的$timeout函数中来实现。所以它将等待在下一个摘要周期中得到评估

$timeout(function(){
   $rootScope.$broadcast('aaa', test); 
})

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;
    });

}
$timeout(function(){
   $rootScope.$broadcast('aaa', test); 
})