AngularJS получает ошибку неизвестного поставщика, вводящую константу в фабрику

#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. Спасибо! Я все еще пытаюсь разобраться в этом, поэтому я буду обновлять вопрос.