【问题标题】:AngularJS $broadcast $onAngularJS $广播$on
【发布时间】:2016-02-17 17:40:38
【问题描述】:

我最近开始学习 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;
    });

}

【问题讨论】:

    标签: javascript angularjs broadcasting


    【解决方案1】:

    它不起作用,因为父控制器Ctrl 将在Ctrl1 控制器加载之前注册。所以虽然$broadcast事件内部控制器Ctrl1事件的listner还没有注册。

    您可以通过将事件的 $broadcast 包装在父控制器的 $timeout 函数中来使其工作。所以它会等待在下一个摘要循环中被评估。

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

    Demo Here

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 1970-01-01
      • 2014-03-04
      • 2015-07-09
      • 2017-09-05
      • 2012-09-11
      • 1970-01-01
      • 2023-03-15
      • 2017-10-01
      相关资源
      最近更新 更多