一番下の行は:
- プロバイダー構成セクションにサービスを注入することはできません。
- あなたは、CAN、プロバイダのサービスを初期化セクションにサービスを注入します。
詳細:
Angularフレームワークには2フェーズの初期化プロセスがあります。
フェーズ1:構成
このconfig
フェーズでは、すべてのプロバイダーが初期化され、すべてのconfig
セクションが実行されます。config
セクションは、プロバイダオブジェクトを構成し、したがって、それらは、プロバイダオブジェクトを注入することができるコードを含んでいてもよいです。ただし、プロバイダーはサービスオブジェクトのファクトリーであり、この段階ではプロバイダーは完全に初期化/構成されていないため、この段階でプロバイダーにサービスの作成を依頼することはできません->使用できない構成段階では/サービスを注入します。このフェーズが完了すると、すべてのプロバイダーの準備が整います(構成フェーズが完了すると、プロバイダーの構成を行うことができなくなります)。
フェーズ2:実行
中にrun
相すべてのrun
セクションが実行されます。この段階でプロバイダーは準備ができており、サービスを作成できます-> run
フェーズ中にサービスを使用/注入できます。
例:
1.注入$http
プロバイダの初期化関数にサービスをするわけではありません作業
//ERRONEOUS
angular.module('myModule').provider('myProvider', function($http) {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function() {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
フェーズ$http
中に実行される関数にサービスを注入しようとしているconfig
ため、エラーが発生します。
Uncaught Error: Unknown provider: $http from services
このエラーが実際に言っているのは$httpProvider
、$http
サービスの作成に使用されるがまだ準備されていないということです(まだconfig
フェーズにあるため)。
注入2. $http
サービスの初期化関数へのサービスWILLの仕事を:
//OK
angular.module('myModule').provider('myProvider', function() {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function($http) {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
サービスをサービス初期化関数に挿入しているため、run
フェーズ中に実行され、このコードが機能します。