2016-09-17 6 views
0

サービス/コントローラではなく、スタンドアロン関数の依存関係を挿入する好ましい方法は何ですか?スタンドアロン関数の依存関係の挿入方法

2つのケースがあります。一つ目は、私は、私はこのケースでpush関数に配列を渡すことができることを右アム

$httpProvider.interceptors.push(function(/* ... */));

のですか?

$httpProvider.interceptors.push(['$q', '$location', function($q, $location) { /* ... */ }]); 

ドキュメントからはわかりません。

後者の場合は、

$routeProvider 
.when('/', { 
    templateUrl: 'main.html', 
    controller: 'MainCtrl', 
    resolve: { 
    loggedin: checkLoggedin 
    } 
}); 

は、私があまりにもcheckLoggedinとして配列を渡すことができますか?

var checkLoggedin = ['$q', '$timeout', '$http', '$location', '$rootScope', function($q, $timeout, $http, $location, $rootScope) { /* ... */ }]; 

Docs我々はresolveマップ値として機能を渡す必要があると言うが、期待通りにそのコードが動作します。

答えて

1

あなたはスタンドアロン機能を注入することができます。そして、もし私が疑問を持っていたら、なぜあなたは予想通りに別のタイプを渡しているのか、それがなぜ機能するのかを尋ねています。それは関数を期待していますが、配列を配置しています。 injectorと呼ばれる角度のメカニズムは、アプリケーションで使用しているエンティティのインスタンスをすべて提供し、注入されるすべてのものを通過し、認識された依存関係をそのインスタンスに変換するために発生したと仮定します。だから、もしインジェクタがそのようなサービスのインスタンスを作るのに使うことができる登録されたサービスを見つけることができないので、それは機能['$q', '$timeout', '$httpHey', function($q, $timeout, $httpHey) { /* ... */ }];の3つのパラメータを見ると、アプリケーションが初期化される前にエラーを返します。しかし、すべての配列項目が認識されると、インスタンスが存在しない場合は新しいインスタンスが作成され、引数として関数に渡されます。そうでなければ、既存のインスタンスが使用されます(サービスはシングルトンなので)。

これは角度の低いレベルのものなので、もっと拡張された応答が必要な場合は、コメントを残してください。

関連する問題