AngularJS:在.config函数中注入提供者

时间:2015-04-08 13:19:24

标签: angularjs angularjs-service angularjs-routing angularjs-provider

我未能在UserAgent函数中注入一个名为.config的AngularJS Provider,但我收到此错误:

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..."
                };
            }
        };
    }

3 个答案:

答案 0 :(得分:2)

更改' UserAgent'在&UserAgentProvider' ....

的以下行中
  

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

     

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

应用程序公开的应用程序角度应该如何在相关应用程序中引用:<ActualProviderName>Provider,单词&#39; 提供商&#39;附加到提供者的实际名称。

答案 1 :(得分:1)

很抱歉这个问题,但我在同样的问题上挣扎,幸运地找到了解决方案。我不是Angular专家所以我的解决方案可能会做得更好,但希望这可以帮助那些人。

查看AngularJS的providers文档,他们的示例说明:

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

然后他们展示了如何将该提供者注入配置函数:

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

需要注意的重要事项是命名约定:提供者名称在声明时没有单词“Provider”,但是配置注入会这样做。

和你一样,我也在为我的配置使用命名函数。所以我的配置注入声明看起来像:

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

但是,使用.$inject进样器,您的工作略有不同。所以你的最终解决方案看起来像:

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

我也使用。$ inject注入器,但因此改为AngularJS文档样式语法:

  

请注意,unicorn提供程序将注入config函数。此注入由提供程序注入器完成,该注入器与常规实例注入器不同,因为它仅实例化并连接(注入)所有提供程序实例。

不确定.config(['MyNamedProvider', NamedConfigFunction])是否优于NamedConfigFunction.$inject = ['MyNamedProvider'];

但重要的一点是在提供者声明期间不要使用“提供者”,而是在注入提供者的过程中将其添加回来

答案 2 :(得分:0)

您可能无法在配置阶段使用服务。配置阶段用于配置服务提供者。完成后,将调用提供程序来创建服务。