サービスをグローバルに使用する場合は、providers
にStatusBar
を追加することができます。しかし、StatusBar
がService
でない場合、インスタンスにいくつか問題が発生することがあります。 (私はこのアプローチにいくつかの問題がありました)。
I18nModule
(翻訳用)のサービスが含まれていることを知らせてください。 AppModuleのimports
にI18nModule
を追加することで、サービスのいくつかのインスタンスがI18nModule
に含まれます。
そのためのソリューションがforRoot()
を使用することです:AppModule
で、その後
export class I18nModule {
static forRoot() {
return {
ngModule: I18nModule,
providers: [I18nService, MyService1, MyService2]
};
}
}
そして:
imports: [
I18nModule.forRoot(),
]
をforRoot()
で我々はインスタンスI18nModule
(およびそのサービス、あなたの質問に戻ります)をシングルトンとする。
総括:
それだけのサービスだ場合、それは大丈夫ですが、その後、あなたは2回同じサービスをインスタンス化しませの世話をしなければならないモジュールの一部であるサービスの場合は、あなたがよ'働いている'サービスがその仕事をしていない理由を理解しようと時間を費やしています。
更新:
角度があるように意図されたモジュラー、それゆえ、それは各コンテキスト、例えば作成したモジュールに奨励しています:
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
HttpModule,
BrowserAnimationsModule,
CoreModule,
LayoutModule,
I18nModule.forRoot(),
BarHandlingModule, // Example
InventedModule // Example too
],
角度のドキュメントを読んだ後、あなたが作成する必要があることを意味コア機能のモジュール、ユーザーのコンテキストのモジュール、注文のモジュール、クライアントのモジュールなどがあります。
AppModule
にサービスを追加する代わりに、アプリの主要なコンテキストごとにモジュールを作成し、imports
のAppModule
に追加してください。イオン性にし、プラグイン以来、コルドバのプラグインを使用しているとき@ SrAxiの答えは完璧であっても、プロバイダ(全体ではなく、モジュール)としてだけで使用されている
モジュールは、プロバイダにそのルートインジェクタ料多くのモジュールを登録することができます遅延ロードされない場合プロバイダーが1回、モジュールが遅延ロードの場合、プロバイダーは子インジェクターに登録されます。アプリがルートインジェクタを起動したときに、新しいプロバイダを追加することを許可していない – alehn96
申し訳ありませんが、あなたが言ったことを正確には得られませんでした。私は自分のプロジェクトに遅延ロードを実装しています。すべてのコンポーネントが遅延ロードをサポートしています。 @ alehn96 – Sampath
これは単なるプロバイダであり、モジュール全体ではないので、 'app.module.ts'ファイルのproviders配列に追加することができます。これはコードジャプラグインのほとんどを使用するための推奨された方法です(モジュールではなく、_providers_なので)。 – sebaferreras