2

我有一个手动引导的角度模块。我试图让它$rootScope附加一个事件侦听器$viewContentLoaded

这是我的代码:

angular.bootstrap(el, [appname]);
//////////////////////////// Fixing links
console.log('patching');
var $rootScope = angular.injector([appname]).get('$rootScope');
console.log($rootScope);// Scope { $id=139,  $root=Scope,  $$destroyed=false,  more...}
$rootScope.$on('$viewContentLoaded', function () {
    console.log('$viewContentLoaded');
});

我得到了一个范围$id=139,并且事件没有在它应该触发的时候触发。

如果我尝试$rootScope进入我的模块主控制器内部,我会得到:

console.log('myController',$rootScope);
Scope { $id=120,  $$childTail=Scope,  $$childHead=Scope,  more...}

我得到一个$rootScopeid 120 ???

如果我将事件附加到模块内的控制器,则事件处理程序会正常工作。

那我做错了什么?我怎样才能rootScope在其控制器之外获得正确的模块?

我应该提到我有一个多应用程序环境。我有一个加载和引导其他模块的主模块,我想知道这个其他模块 viewContent 何时完成加载,而无需手动将代码添加到每个模块中......

注意:我可以得到$rootScope这样的:

var $rootScope = angular.element(el).scope().$root;

但这在$compileProvider.debugInfoEnabled(false);:(

4

1 回答 1

1

好的,如果有人感兴趣,这就是我最终得到的结果:

(function (angular) {

    var origMethod = angular.module;

    angular.module = function (name, reqs, configFn) {
        var module = origMethod(name, reqs, configFn);

        module.run(function ($rootScope) {
            //////////////////////////// Fixing links
            $rootScope.$on('$viewContentLoaded', function () {
                ___fixLinks($('[ng-view],ng-view,.ng-view','[ngg-app="' + name + '"]'));
            });
        });

        return module;
    };

})(angular);
于 2015-05-30T05:26:39.650 回答