2015-05-30 78 views
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主要controlelr我得到:

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

我得到一个$rootScope ID为120 ???

和如果我将事件附加到模块内部的控制器,事件处理程序就像它应该那样工作。

那么我做错了什么? 如何在控制器外部获得正确的rootScope模块?

我应该提到,我有多个应用程序环境。我有一个主要的模块,加载和引导其他模块,我试图知道当这个其他模块viewContent已完成加载与手动添加代码到每一个每个...

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

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

但是,这并不正常工作时$compileProvider.debugInfoEnabled(false); :(

回答

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