2017-10-28 25 views
1

私は2週間ほど前にグーグルで勉強していますが、私の質問に適切な答えが見つかりません。だから私はここで尋ねている。遅延4.4.6遅延ロードされたモジュールの共有サービス

説明

ツール:4.4.6角度と角度-CLI 1.4.9

は、私が働いている非常に単純なアプリケーションを持っています。 AuthModule、AdminModule、LayoutModule、およびSharedModuleがあります。これらのモジュールをすべてAppModuleに追加するとすべてうまく動作しますが、これらのモジュールをAppModuleに追加してから、ベンダーの....サイズが600kb(--aot)以上になります。

モジュールの説明。

ShareModule:各モジュールに共通するいくつかのモデルとサービスがあります。 HttpServiceAuthModule:は、だから私は彼らにhereに記載されているルーティングを持つすべての怠惰なロードされたモジュールを置くことを決めた共有モジュール

からのHTTPServiceを使用して、簡単なログインと登録コンポーネントが含まれています。ベンダ... jsのサイズが50%近く縮小されますが、依存関係は機能しません。

私はLazyLoadedモジュールでSharedModuleを参照しましたが、それでも問題が解決しない場合でも、依存関係は機能しません。私は知っている、各遅延ロードされたモジュールは、独自のDIツリーを作成しますが、遅延ロードされたモジュール内で作成され提供されている以外の依存関係は解決されません。

ツールセクションで私が言ったように、いくつかのコンポーネントで2回使用された同様のモジュールを検出する素晴らしい機能を持つAngular-CLIを使用しています。そのモジュールの共通のjsを作成します。しかし、まだ問題が残っている私は遅延ロードされたモジュールで共有サービスにアクセスすることはできません。

遅延ロードされたモジュールで共有サービスをロードする方法はありますか?

おかげ

答えて

1

あなたは怠惰なロードされたモジュールからのサービスは、どこにでもグローバルシングルトンとして利用し、利用できるようにforRootを実装し、AppModuleMyLazyModule.forRoot()をインポートする場合。これにより、プロバイダーはグローバルに登録され、残りは遅延ロードされます。

詳細はhttps://angular.io/guide/ngmodule#configure-core-services-with-coremoduleforrootを参照してください。

+0

私はリンクするように指摘してくれてありがとうございますが、ルートまたは輸出共有モジュールのためにエクスポートするかどうかは関係ありません。すべての共有サービスはSharedModule内で共有モデルを使用しているので、私がroot用のサービスをエクスポートしようとすると、root用のすべてのモデルもエクスポートされます。 – Riy

1

解決策が見つかりました。これは、痛みの中で言及されているdocumentation私の注意を前に取得していない。

共有モジュールには、アプリケーション全体のシングルトンprovidersを指定しないでください。 A その共有モジュールをインポートする遅延ロードモジュールは、サービスの独自のコピー を作成します。

あなたがする必要があることは、共有モジュールからの提供とサービスの提供ではありません。遅延ロードされたモジュールで共有モジュールをインポートし、その遅延ロードされたモジュールからサービスを提供するだけです。

他の人に役立つことを願っています。

ハッピーコーディング。 :)

+0

このアプローチでは、遅延ロードされたモジュールは同じサービスを共有できますか?他のモジュールによって設定されたサービスのパブリックプロパティにアクセスしようとすると、遅延ロードされたモジュールで定義されていません。 – bomaboom

関連する問題