Неизвестный поставщик: $rootElementProvider <- $ rootElement <- $ расположение в angulartics.js
Я использую angulartics в своем проекте, но когда я добавляю зависимость к своему модулю, я получаю следующую ошибку:
Неизвестный поставщик: $rootElementProvider <- $ rootElement <- $ location.
Я подключил angulartics.js
в html после angular.js
Он генерируется в.run:
код lib здесь: https://github.com/luisfarzati/angulartics/issues/203
$location
это хороший объект, но $rootElementProvider
а также $rootElement
не определены.
Как решить эту проблему?
1 ответ
Недавно я получил эту же проблему, единственная причина, по которой я знаю, что это может произойти, это когда вы создаете инжектор angularjs вручную, который зависит от модуля, который внедряет $ location во время начальной загрузки, или когда вы пытаетесь самостоятельно получить $ 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'
]);
});
}
Ура!