2

現在、レイジーローディングを使用している間に、私のすべてのプロバイダーをapp.module.tsにロードします。これは私のアプリの起動時間をスピードアップしないため、 50人のカスタムプロバイダーのようなものがある(私を裁かないでください))。レイジーローディングとプロバイダーの戦略

したがって、実際にすべてのアプリケーションをロードする必要がある場合、またはロードする必要がある場合は、それらのアプリケーションのみを使用する必要があるかどうかを確認する必要があります。

私が実際に使用している場所でのみプロバイダを読み込むほうがよいと思います。

しかし、このような場合には、以下の構文を解決する方法で、すべての後、私にとっては明らかではない。

レッツは、私が自分自身のモジュールと3つのプロバイダーとの3つのページ(A、BおよびC)を持っていると言います(1,2および3)。

A use 1 
B use 1, 2, 3 
C use 1, 2 
  • 私は1はすべてのアプリケーション全体で使用されているので、私は3以来app.module.ts

  • でそれを宣言しなければならない、推測ページBにのみを使用している、私は私がしなければならないと思いますそれだけで宣言してくださいB.module.ts

  • しかし、約2? B.module.tsC.module.tsの両方で宣言すれば、同じプロバイダーの「メモリ」を共有することができます(プロバイダに値が含まれていれば、BとCの両方に同じオブジェクトが表示されるはずです)。単純にプロバイダを「いつものように」注入し、残りの部分を実行するだけですか?

任意の助けを事前にThxを、本当に

UPDATE

ない私が正しく角度のドキュメントを理解しそれが目標だ場合、プロバイダがためにロードする必要があることを確認いただければ幸いですすべてのアプリの幅広い権利ですか?

は、あなたのプロバイダ2とその依存関係でBとCのモジュールinculdesことをintenciate共有モジュールを作成する必要があります

https://angular.io/guide/ngmodule-faq#q-component-scoped-providers

答えて

1

を参照してください。

編集:プロバイダーをエクスポートする必要はありません。

+1

興味深いことに、これは宣言のない共有モジュールでしょうか? @NgModule({providers:[2]、exports:[2]}) –

+1

のようなものが動作するかもしれませんが、複数のモジュールで必要なモジュールでうまく動作します。 – Flow

+0

しようとすると、あなたに教えてくれるでしょう –

0

答えは、シングルトンサービスであるため、app.module.tsにプロバイダを追加する必要があります。ここでangular dependency injection docからです:

依存関係は、インジェクタの範囲内でシングルトンです

それはあなたがapp.module.tsでプロバイダを宣言するとき、それは全体のアプリでシングルトンとなり、すべてのモジュールは、それが共有することになります注入さ意味それと同じインスタンス。
プロバイダを別々のモジュールに宣言する場合i。e B.module.tsC.module.tsの場合、B pageはプロバイダーのインスタンスを使用し、C pageの別のプロバイダーのインスタンスを使用します。そしてそれは提供者の目的ではありません。

+1

はい、私はあなたが正しいと思います。この質問を閉じる前に、ローカルでもう少しテストを行うかもしれません。 Thx –

+0

@PeterParker:テストしましたか? – Duannx

+0

申し訳ありません私は時間の後ろに走っていて、持っていなかったし、おそらく今週テストする時間がありません。 「それは提供者の目的ではない」について私は「はい」と「いいえ」とは言いません。はい、シングルトンが必要な場合はapp.moduleで宣言する必要がありますが、モジュールのプロバイダを宣言するコンポーネントの範囲に制限することも可能です(https://angular.io/を参照)。 guide/ngmodule-faq#-i-add-other-providers-a-module-or-a-component –