1

我无法注入在函数UserAgent内部调用的 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..."
                };
            }
        };
    }
4

3 回答 3

3

将以下行中的“UserAgent”更改为“UserAgentProvider”....

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

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

这就是 Angular 期望应用程序公开的提供程序在依赖应用程序中被引用的方式:<ActualProviderName>Provider,将单词“ Provider ”附加到提供程序的实际名称中。

于 2016-07-15T06:04:02.900 回答
2

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

查看 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 文档样式语法:

请注意,独角兽提供者被注入到配置函数中。此注入由提供程序注入器完成,它与常规实例注入器不同,因为它仅实例化和连接(注入)所有提供程序实例。

不确定是否.config(['MyNamedProvider', NamedConfigFunction])更好与。NamedConfigFunction.$inject = ['MyNamedProvider'];

但重要的一点是在提供者声明期间离开“提供者”,但在注入所述提供者期间将其添加回来

于 2016-05-11T15:48:29.400 回答
0

您不能在配置阶段使用服务。配置阶段用于配置服务的提供者。完成后,将调用提供者来创建服务。

于 2015-04-08T13:23:50.177 回答