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

Demo Here