#javascript #angularjs
#javascript #angularjs
Вопрос:
Я получаю unknown provider
ошибку angular при попытке ввести a constant
в a factory
, который вводится в a controller
.
angular.js:13920 Error: [$injector:unpr] Unknown provider: estimatingUtilitiesSettingsProvider <- estimatingUtilitiesSettings <- templateResolutionDataService
app.js:
angular
.module('main', [
'ngResource'
, 'angulartics'
, 'angulartics.appinsights'
, 'envModule'
, 'gettext'
, 'webModule'
, 'serviceModule'
])
.controller('testPageController', [
'$scope'
, '$http'
, '$resource'
, 'envModule'
, 'gettext'
, 'templateResolutionDataService'
, 'profileTemplateResolutionDataService'
, 'templateResolutionDataWithMultipleTemplatesService'
, 'partResolutionDataService'
, 'featureToggleService'
, 'recommendedResolutionDataService'
, 'profiledResolutionDataService'
, function ($scope, $http, $resource, envModule, gettext
, templateResolutionDataService
, profileTemplateResolutionDataService
, templateResolutionDataWithMultipleTemplatesService
, partResolutionDataService
, featureToggleService, recommendedResolutionDataService
, profiledResolutionDataService) {
//contents
}]);
templateResolutionDataService.js:
(function (angular) {
'use strict';
angular
.module('serviceModule', [
'webModule'
])
.factory('templateResolutionDataService', [
'gettext'
, 'estimateUtilitiesExtensionService'
, 'partResDataServiceSettings'
, 'estimatingUtilitiesSettings'
, function (gettext, estimatingUtilitiesService
, partResDataServiceSettings, estimatingUtilitiesSettings) {
}
]);
})(window.angular);
webModule.js:
(function (angular) {
'use strict';
angular
.module('webModule', [
'ng'
, 'ngResource'
,'miEnvironment'
,'gettext'
,'analyticsFilters'
,'touchEvents'
,'flyoutModule'
])
.constant('estimatingUtilitiesSettings', {
SourceKeys: {
'Template': 1
,'Part': 2
}
});
})(window.angular);
Я корректировал порядок наследования, но, похоже, это не исправляет. Кто-нибудь знает, что я делаю неправильно или как я могу ее идентифицировать и устранить?
РЕДАКТИРОВАТЬ: комментирование объявления константы (и ручная замена ее ссылок соответствующими значениями) позволяет приложению продолжить работу после этой точки, поэтому в отношении templateResolutionData.js
этого единственное, что препятствует его выполнению.
Комментарии:
1. Разве это не должно быть
miEstimatingUtilitiesSettings
вместоestimatingUtilitiesSettings
?2. Я ошибся при ее копировании, mi не должен быть там и отсутствует в коде
3. Выполняются ли все ваши определения модулей? Опубликованная вами ошибка является распространенной, когда код никогда не выполняется из-за отсутствия тега script или синтаксической ошибки.
4. Они должны быть. Я пытаюсь проверить все из них прямо сейчас, чтобы увидеть, нет ли сбоев. Я должен отметить, что я использую gulp inject, чтобы убедиться, что все они введены в мой индекс
serve
. Когда я проверяю индекс, все скрипты перечислены.5. Извините за задержку, я могу подтвердить, что файлы загружаются (по крайней мере), поэтому они присутствуют в приложении и должны быть видны.
Ответ №1:
Я упростил ваш код и запустил его без ошибок на скрипке
angular.module('main', ['webModule', 'serviceModule'])
.controller('testPageController', [
'$scope', '$http', 'templateResolutionDataService',
function($scope, $http, templateResolutionDataService) {
//contents
$scope.setting = templateResolutionDataService;
}
]);
(function(angular) {
'use strict';
angular.module('serviceModule', [
'webModule'
])
.factory('templateResolutionDataService', ['estimatingUtilitiesSettings',
function(estimatingUtilitiesSettings) {
var getSetting = function() {
return estimatingUtilitiesSettings.SourceKeys;
}
return getSetting();
}
]);
})(window.angular);
(function(angular) {
'use strict';
angular.module('webModule', [])
.constant('estimatingUtilitiesSettings', {
SourceKeys: {
'Template': 1,
'Part': 2
}
});
})(window.angular);
Комментарии:
1. Я рад знать, что это, по крайней мере, должно работать. Однако мне пришлось заменить константу во всех файлах, используя ее, чтобы заставить ее работать в моем проекте. У вас есть какие-либо идеи относительно того, почему у меня так много проблем с введением этой константы?
2. Ну, на самом деле, теперь это работает. Я ничего не изменил, но сегодня он работает.
Ответ №2:
Вы неправильно miEstimatingUtilitiesSettings
назвали EstimatingUtilitiesSettings
Комментарии:
1. Да, я допустил ошибку при копировании кода, он был обновлен.
2. Это не был downvoter, но технически это не отвечает на вопрос.
3. Я рассмотрю это завтра утром, если это все еще не решено, спасибо, что дали мне знать ^
4. Спасибо! Я все еще пытаюсь разобраться в этом, поэтому я буду обновлять вопрос.