2017-06-30 13 views
4

私はionic 3プロジェクトに遅延読み込みパターンを実装しました。これはすごくうまくいきます。 私は1つの質問を持っています。私はネイティブのStatusBarの機能をapp.Henceに実装する必要があると言います。私はそれをそれぞれのページで別々に実装しなければなりません。これをapp.module.tsに載せました。共通プロバイダによる遅延ロード

providers: [ 
    StatusBar, 
] 

はこの良いアプローチですか私は、各コンポーネントのモジュールにproviderとしてStatusBarを注入する必要がありますか?私にとって、それは冗長な仕事のようです。しかし、それを行う最良の方法は何ですか?それはなぜですか?

+0

モジュールは、プロバイダにそのルートインジェクタ料多くのモジュールを登録することができます遅延ロードされない場合プロバイダーが1回、モジュールが遅延ロードの場合、プロバイダーは子インジェクターに登録されます。アプリがルートインジェクタを起動したときに、新しいプロバイダを追加することを許可していない – alehn96

+0

申し訳ありませんが、あなたが言ったことを正確には得られませんでした。私は自分のプロジェクトに遅延ロードを実装しています。すべてのコンポーネントが遅延ロードをサポートしています。 @ alehn96 – Sampath

+1

これは単なるプロバイダであり、モジュール全体ではないので、 'app.module.ts'ファイルのproviders配列に追加することができます。これはコードジャプラグインのほとんどを使用するための推奨された方法です(モジュールではなく、_providers_なので)。 – sebaferreras

答えて

2

、あなただけapp.module.tsファイルのプロバイダの配列に追加し、することができますすべてがうまくいくはずです。

(単にプロバイダ、彼らはモジュールじゃないので)コルドバのプラグインのほとんどを使用するための推奨方法です

+0

ありがとう! :Dしかし、私は 'StatusBar'がCordovaプラグインであることを知らなかった。:(とにかく、知っておきたい!ありがとう!:P – SrAxi

1

サービスをグローバルに使用する場合は、providersStatusBarを追加することができます。しかし、StatusBarServiceでない場合、インスタンスにいくつか問題が発生することがあります。 (私はこのアプローチにいくつかの問題がありました)。

I18nModule(翻訳用)のサービスが含まれていることを知らせてください。 AppModuleのimportsI18nModuleを追加することで、サービスのいくつかのインスタンスが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にサービスを追加する代わりに、アプリの主要なコンテキストごとにモジュールを作成し、importsAppModuleに追加してください。イオン性にし、プラグイン以来、コルドバのプラグインを使用しているとき@ SrAxiの答えは完璧であっても、プロバイダ(全体ではなく、モジュール)としてだけで使用されている

+1

Angular.Butと私はそれを扱う方法を知りたいと思います。 – Sampath

+0

@Sampathああ男!ごめんなさい! 'StatusBar'がCordovaプラグインであることを知らなかった! :S – SrAxi