4

スニペット 1 は機能しません。エラーが表示されます: [$injector:unpr] 不明なプロバイダー: $q

/* Snippet 1*/
var mApp = angular.module('MyApp',[]);
mApp.provider('authProvider', ['$q', function($q) {
    this.$get = function(){

        authProvider = {};
        authProvider.Title = function(){

            var deferred = $q.defer();
            deferred.resolve("promise resolved");
            return deferred.promise;

        }
        return authProvider;
    }
}]);

ただし、スニペット 2 は機能します。私はなぜそれが混乱しているのですか?私が読んだすべてのファクトリーサンプルコードは、.factory('MyFactory',[$q,function($q) {}]); のような最初の行に依存関係を挿入します。上記のプロバイダー コードでそのスタイルが機能しないのはなぜですか? また、なぜ $q を GET 宣言の下に挿入しているのに、TITLE 宣言の下に挿入していないのですか。

/* Snippet 2*/
mApp.provider('authProvider', function() {
    this.$get = function($q){

        authProvider = {};
        authProvider.Title = function(){

            var deferred = $q.defer();
            deferred.resolve("promise resolved");
            return deferred.promise;

        }
        return authProvider;
    }
});

助けてください!!!

(コードは今のところ何もしません。構文を学ぼうとしているだけです)

4

2 に答える 2

3

で直接 DI を実行することはできません。provider使用しproviderている場合は、コンポーネントを に挿入する必要があります$get

provider依存関係を に直接 注入できない理由はprovider、 がモジュールのロード フェーズ中に実行されるのに対し、$getは提供するサービスをインスタンス化するときに実行されるためです。

モジュールのロード/構成段階では、サービスを使用できません。

于 2015-09-12T14:33:01.430 に答える
2

私が読んだすべてのファクトリ サンプル コードは、.factory('MyFactory',[$q,function($q) {}]);Why doesn't that style work in the provider code above のような最初の行に依存関係を挿入します。

providerこの図は、 aと aの違いを理解するのに常に役立ちましたfactory

xxxxxx
ソース: Simplygoodcode.com

factory関数はの関数$getですprovider。インジェクションのproviderに、構築関数は関数を構成できます$get$get関数は、注入が行われる場所です。

provider構築関数は注入できません。そのため、そのエラーが発生します。$get関数は注入可能であり、それが で指定する関数ですfactory。空のコンストラクター関数でfactoryを作成するための構文糖衣です。provider

関連項目

于 2015-12-29T11:02:46.493 に答える