AngularJS $播放$ on

时间:2016-02-17 17:40:38

标签: javascript angularjs broadcasting

我最近开始学习AngularJS。所以,我尝试从控制器向另一个控制器发送消息。我看了很多例子,我的代码也是类似的,但是没有用。 为什么$ rootScope。$ on not work? 有人可以帮帮我吗?

HTML:

<div ng-controller="Ctrl">
    {{message}}

    <div ng-controller="Ctrl1">
        <p>Ctrl1</p>

        {{test}}
    </div>
</div>

控制:

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

}

1 个答案:

答案 0 :(得分:0)

它不起作用,因为父控制器Ctrl将在Ctrl1控制器加载之前进行注册。因此,事件$broadcast事件内部控制器Ctrl1列表器尚未注册。

您可以通过在父控制器的$ timeout函数中包含事件的$ broadcast来使其工作。因此它将在下一个摘要周期中等待评估。

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

Demo Here