1

Я не в состоянии впрыснуть AngularJS поставщика, называется UserAgent внутри .config функции, но я получаю эту ошибку:AngularJS: инъекционные провайдеры функции .config

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to: 
Error: [$injector:unpr] Unknown provider: UserAgent 

Это мой конфиг:

angular 
    .module('app') 
    .config(Config); 

Config.$inject = ['$routeProvider', 'UserAgent']; 

function Config($routeProvider, UserAgent) { 
    /*** code here ***/ 

} 

И это мой провайдер:

angular 
    .module('app') 
    .provider('UserAgent', UserAgent); 

    function UserAgent() { 
     return { 
      $get: function() { 
       return { 
        title: "Testing..." 
       }; 
      } 
     }; 
    } 
+0

У меня такая же проблема. Любое решение? – TSmith

ответ

0

Вы можете не использовать сервисы на этапе конфигурации. Фаза конфигурации используется для настройки поставщиков услуг. Как только это будет сделано, провайдеры будут вызваны для создания служб.

+0

Итак, могу ли я использовать провайдера? –

+0

Да, вы можете ввести поставщика в функцию конфигурации. Но не услуга –

0

Извините, что не задал этот вопрос, но я боролся с этой же проблемой и, к счастью, нашел решение. Я не специалист по углу, поэтому мое решение может быть сделано лучше, но надеюсь, что это поможет кому-то там.

Глядя на документации AngularJS»для providers, их пример гласит:

myApp.provider('unicornLauncher', function UnicornLauncherProvider() {}); 

А потом они показывают, как внедрить этот поставщик в функцию конфигурации:

myApp.config(["unicornLauncherProvider", function(unicornLauncherProvider) {}); 

Важно отметить, соглашение об именах: имя поставщика не имеет в нем слова «поставщик» в момент объявления, но информция вставки делает.

Как и вы, я также использую именованную функцию для своей конфигурации. Таким образом, мое заявление инъекции конфигурации выглядело как:

angular.module('sample').config(['UserAgentProvider', config]); 

Однако, вы делаете это немного отличается от использования .$inject инжектора. Таким образом, ваш конечный раствор будет выглядеть так:

angular.module('sample').config(config); 
config.$inject = ['UserAgentProvider']; 

Я тоже с помощью $ INJECT инжектор, но перешел к синтаксису AngularJS документации стиль из-за этого:.

Notice that the unicorn provider is injected into the config function. This injection is done by a provider injector which is different from the regular instance injector, in that it instantiates and wires (injects) all provider instances only.

Не уверен, что если .config(['MyNamedProvider', NamedConfigFunction]) является лучше против NamedConfigFunction.$inject = ['MyNamedProvider'];

Но важным моментом является отказ от «Провайдера» во время объявления поставщика, но добавление его обратно во время инъекции указанного провайдера

1

Change «UserAgent» в следующей строке на «UserAgentProvider» ....

Config.$inject = ['$routeProvider', 'UserAgent'];

Config.$inject = ['$routeProvider', 'UserAgentProvider'];

вот как угловой поставщики ожидает открытые приложениями, которые будут переданы в качестве зависимых приложений: <ActualProviderName>Provider, слово «Provider 'добавляется к фактическому имени поставщика.