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 が期待する方法です。プロバイダーの実際の名前に「 Provider<ActualProviderName>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 ドキュメント スタイルの構文に切り替えました。

unicorn プロバイダーが config 関数に挿入されていることに注意してください。このインジェクションは、すべてのプロバイダー インスタンスのみをインスタンス化してワイヤリング (注入) するという点で、通常のインスタンス インジェクターとは異なるプロバイダー インジェクターによって行われます。

.config(['MyNamedProvider', NamedConfigFunction])のほうが優れているかどうかはわかりません。NamedConfigFunction.$inject = ['MyNamedProvider'];

ただし、重要な点は、プロバイダーの宣言中に「プロバイダー」を省略し、そのプロバイダーの注入中に追加し直すことです

于 2016-05-11T15:48:29.400 に答える
0

構成段階でサービスを使用することはできません。構成フェーズは、サービスのプロバイダーを構成するために使用されます。完了すると、プロバイダーが呼び出されてサービスが作成されます。

于 2015-04-08T13:23:50.177 に答える