実際、モジュールレベルとコンポーネントレベルでサービスを提供することができます。あなたは、このようなNgModuleのproviders
配列でそれをリストすることによって、モジュールレベルでサービスを提供することができます。
@NgModule({
declarations: [
...
],
imports: [
...
],
providers: [MyService],
bootstrap: [AppComponent]
})
あなたがこれを行うと、あなたはモジュール全体とすべての子供たちを越え同じインスタンスを提供しています。
しかし、時には、個のインスタンスに対して個別のインスタンスのサービスをコンポーネントに提供することができます。
@Component({
templateUrl: './app.component.html',
providers: [MyService]
})
これはちょうどこのコンポーネントのサービスの新しいインスタンスを提供します。その場合は、次のようなコンポーネントのデコレータでproviders
配列にそれをリストすることによって、コンポーネントレベルでのサービスを提供することができます。
モジュールレベルでサービスを提供する場合の1つの例は、サービスを使用して複数のコンポーネントで共有されるデータを保持する場合です。これは、サービスに格納されているが、いくつかのコンポーネントで使用されている変数またはオブザーバブルを使用している可能性があります。サービスがステートレス(Http呼び出しからのobservablesのみを返す)である場合、モジュールレベルでサービスを提供したい場合もあります。これらのシナリオでは、共有インスタンスを持つことが理にかなっています。
また、データを保持するサービスを提供することもできますが、各コンポーネントには独自のインスタンスが必要です。このシナリオでは、サービスをコンポーネントレベルで提供することが理にかなっています。
希望に役立ちます。
私はモジュールまたはアプリレベルで "提供する"と言います。注入とは、インジェクタがインスタンスを作成し、その値をコンストラクタに渡すときにインジェクタが行うことです。 –
本当に十分です。私は概念を過度に単純化したかもしれない。 –
モジュールレベルで挿入すると共有されますが、コンポーネントレベルで挿入すると共有されません。シングルトンサービスインジェクションを使用するには、モジュールレベルで使用します –