events - AngularJS 广播不适用于第一个 Controller 负载

标签 events angularjs broadcast publish-subscribe

在这个 PlunkerDemo 中,我试图将一个事件从父 Controller 广播到子 Controller 。然而,直接在父 Controller 中这样做是行不通的。处理程序不注册事件。但是,基于 ng-click 或基于 setTimeout 执行此操作,它可以工作。是因为范围生命周期吗?

http://beta.plnkr.co/edit/ZU0XNK?p=preview

请参阅已接受答案的评论。他们解释了我的问题。

最佳答案

对 angular 范围的任何更改都必须在 angular 框架内进行,如果必须在框架外进行任何更改,我们必须使用 .$apply功能。

$apply() is used to execute an expression in angular from outside of the angular framework.



在您的情况下,您正在触发 $broadcastsetTimeout ,在 angular 框架之外调用回调。

所以你有两个解决方案,要么使用 $timeout由angular提供的服务或使用.$apply功能。

我更喜欢使用 $timeout功能。
var ParentCtrl = function($scope, $rootScope, $timeout){

    $scope.broadcast = function(){
        $rootScope.$broadcast('Sup', 'Here is a parameter');
    };

    $timeout(function(){
        $scope.$broadcast('Sup');
    }, 1000);

    //this one does not work! Most likely due to scope life cycle
    $scope.$broadcast('Sup');

    $scope.$on('SupAgain', function(){
        console.log('SupAgain got handled!');
    });

};

演示:Fiddle

使用 $apply
setTimeout(function(){
    $scope.$apply(function(){
        $scope.$broadcast('Sup');
    });
}, 1000);

关于events - AngularJS 广播不适用于第一个 Controller 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15676072/

相关文章:

angularjs - Angular 2 - 从字符串动态加载组件

java - 在 Spark 中将数据集应用为广播

Android 4.2.2来电广播

python - 如何从 Python 触发 Google Analytics 事件?

c# - 用户控制事件不触发

javascript - angularjs 和范围问题(我认为)

javascript - $http 得到不刷新的结果

wcf - WCF服务地址的UDP广播

javascript - DOM 更改事件 Firefox 扩展

java - EventBus 粘帖调用一次