未知提供者:$ rootElementProvider< - $ rootElement< - 位于angulartics.js的位置

时间:2014-09-20 06:22:18

标签: angulartics

我在我的项目中使用angulartics,但是当我向模块添加依赖项时,我收到以下错误:

未知提供商:$ rootElementProvider< - $ rootElement< - $ location。

我在angulartics.js

之后在html中插入了angular.js

在.run中生成:

这里的

lib代码:https://github.com/luisfarzati/angulartics/issues/203

$location是好对象,但$rootElementProvider$rootElement未定义。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,我知道这可能发生的唯一原因是当你手动创建一个angularjs注入器时,这取决于在引导期间注入$ location的模块,或者当你试图获得$ location时你自己通过那个注射器。

此问题实际上与angulartics库本身无关,而是与angular自己的$ location服务有关,该服务与$ rootElement有直接依赖关系,该元素是在应用程序引导期间定义的,因此在应用程序启动之前不存在。

有一种简单的方法可以解决这个问题,如果你遇到这个问题,那就是从你的应用程序中删除angulartics作为依赖项,并将其添加为resumeBootstrap方法的依赖项,这允许我们添加更多在恢复angular的引导过程时依赖于运行时。

例如:

angular.module('myApp', [
  // array of dependencies without angulartics
]);
var preBootstrapInjector = angular.injector(['ng', 'myApp']);
var $rootScope = preBootstrapInjector.$get('$rootScope');
var myService = preBootstrapInjector.$get('myService');
myService.getDataFromServer()
  .then(doSomethingWithThatData)
  .then(resumeBootstrap);
    
function resumeBootstrap(){
  // Clean up the custom injector for garbage collection
  $rootScope.$destroy();
  
  // Resume Angular's bootstrap process
  $(document).ready(function() {
    angular.resumeBootstrap([
      // dependencies from modules that need $location
      'angulartics'
    ]);
  });
}

干杯!