これを簡単に説明することはできませんが、基本的にはプロバイダとして設定されているため、私のプロジェクトで使用されていたAPIの配列は、最初は空です。さまざまな設定ブロックがAPIオブジェクトを配列に追加することができ、これが機能しているようです。私は毎回console.logを出力し、配列が増えています。サービスが別の場所に注入されたときにアンカープロバイダの設定がリセットされる
私はサービスを別のもの(この場合は$ httpインターセプタ関数)に挿入し、サービスメソッドを使って配列を返すが、空の配列が得られるたびにそれを返す。
私は、すべての設定ブロックが最初に実行され、傍受されている$ http呼び出しがその後に起こっていると思っていたので、傍受されるまでに配列にはAPIがいっぱいになるはずです。
とにかく、ここでいくつかのコード
angular.module('authModule').provider('authService', function(){
var _apis = [];
return({
addApi: addApi,
$get: instantiateAuth
});
function addApi(newApi){
_apis.push(newApi);
console.log("API added", _apis);
}
function instantiateAuth() {
return({
getApis: function(){
console.log("Getting APIs", _apis);
return _apis;
}
});
}
})
.config(function($httpProvider){
$httpProvider.interceptors.push(function($log, $rootScope, $q) {
return {
request: function(config) {
var injector = angular.injector(['ng', 'authModule']);
var authService = injector.get('authService');
console.log("apis", authService.getApis());
}
};
});
});
そして例のconfigブロック
angular.module('myModule').config(function ($provide, authServiceProvider) {
authServiceProvider.addApi({
url: 'https://apiurl.com',
other: 'stuff'
});
authServiceProvider.addApi({
url: 'https://apiurl2.com',
other: 'stuff'
});
});
はそうだ、appApi方法は、configブロック(2回ここ)に呼び出されるたびに、この行を出力配列console.log( "API added"、_apis);最初のコールの後に1つのアイテムを、2番目のコールの後に2つのアイテムを正しく出力します。
このコード(authService.getApis())は、HTTP呼び出しがインターセプトされたときに最初に起動され、空の配列をコンソールに記録します。
本当にありがとうございます。
EDIT:
問題が
VARインジェクタ= angular.injector([ 'NG'、 'authModule'])この行であると思われます。
私のプロバイダは、このような状況が発生するたびにリセット/再作成されるようです。だから、私はインジェクタの使い方を誤解しているかもしれません。私はもともとauthServiceを関数のパラメータに通常の方法で注入していましたが、循環依存を取得していました(私の認証サービスはモーダルウィンドウを開く必要がありますが、角度UIモーダルはHTTPサービスに依存しています。ユーザーが認証された私の認証サービス:()
ありがとうございました。 $ injector.has( 'authService')がtrueを返すという事実にもかかわらず、$ injector.get( 'authService')は未定義に戻っていました。私はこれが非常に奇妙なので、代わりに(間違って)angular.injectorを使って試してみました。私はそれをあなたが示した方法で働かせ、それはもはや未定義に戻っていません。理由は分かりませんが、うまくいきました。 – jonhobbs