2015-05-30 77 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);