0

在下面的 jsFiddle 中,我演示了一个让我思考的问题。它源于需要向所有范围发送系统范围的事件,告诉他们系统已完成引导。为了做到这一点,我在引导后得到了 rootScope,并调用了它的 evalAsync。唉! 它没有执行。

见这里:http: //jsfiddle.net/cusrC/8/

angular.element(document).ready(function() {
angular.bootstrap(body, ['app']);
var ngInjector = angular.injector(['ng']);

var rootScope = ngInjector.get('$rootScope');
var x = rootScope.$eval(function(scope) {   
        console.log('in eval');
        scope.$broadcast('onLoad'); 
        scope.$evalAsync(function(scope) {  
            console.log('in evalAsync');
            scope.$broadcast('onLoad'); 
        });
    });
console.log('x',x);
console.log('after');
});

非常感谢您的任何想法或想法 Lior

4

2 回答 2

3

由于您的代码在 Angular 的“外部”运行,因此您需要在示例代码的末尾调用 rootScope.$digest() 以使摘要循环运行。然后 $evalAsync() 中的表达式将被评估/执行。

于 2013-02-20T20:48:37.960 回答
2

Mark 关于调用$digest函数是正确的,但还有一件事:你没有得到正确的根范围。

angular.bootstrap返回模块的注入器,该注入器已经拉入'ng'模块。

这是您的小提琴,已修改

于 2013-02-20T21:26:33.207 回答