我最近遇到了同样的问题,我知道这可能发生的唯一原因是当你手动创建一个依赖于在引导期间注入 $location 的模块的 angularjs 注入器时,或者当你试图通过它自己获取 $location 时注射器。
这个问题实际上与 angulartics 库本身无关,而是与 angular 自己的 $location 服务有关,该服务直接依赖于 $rootElement,该元素是在应用程序的引导过程中定义的,因此在应用程序启动之前不存在。
如果您在使用 angulartics 时遇到此问题,有一种简单的方法可以解决此问题,即从您的应用程序中删除 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'
]);
});
}
干杯!