2017-07-28 12 views
0

私はAngular2において、モジュールによって提供されるサービスが他のモジュールで利用可能であることを知っています。サービスを共有する方法 - NgModule - Angular2

私は、MessengerServiceをインポートする遅延ロードされたMessengerModuleを持っています。私はHeaderModuleも持っています。このHeaderModuleはメッセージ通知を更新するためだけにこのサービスを必要とします。私は二つの方法を参照

  1. がAppModuleレベル
  2. でMessengerServiceの提供はMessengerModuleでMessengerServiceを提供します。 HeaderModuleでMessengerModuleをインポートします。

1では、MessengerModuleを論理的なサービスを削除することによって「壊す」のは厄介です。 2では、かなり大きなMessengerModuleの遅延読み込み機能を失います。 HeaderModuleが熱心に読み込まれているので、Messengerも正しく動作しますか?

メインレベルでサービスを提供することをお勧めします。あなたの提案は何ですか?

+0

[2つのモジュール間でサービスを共有する方法 - angular2の@NgModule?](https://stackoverflow.com/questions/40089316/how-to-share-service-between-two-modules- ngmodule-in-angular2) – LarsMonty

答えて

1

thisの記事を読む必要があります。

これは含む: APP /共有/ shared.module.ts

import { NgModule, ModuleWithProviders } from '@angular/core'; 
import { CounterService } from './counter.service'; 

@NgModule({}) 
export class SharedModule { 
    static forRoot(): ModuleWithProvider`enter code here`s { 
    return { 
     ngModule: SharedModule, 
     providers: [CounterService] 
    }; 
    } 
} 

APP/SharedModuleのみで構成されているので

import { SharedModule } from './shared/shared.module'; 

@NgModule({ 
    imports: [ 
    SharedModule.forRoot(), 
    ... 
    ], 
    ... 
}) 
export class AppModule {} 

をapp.module.ts Angularが をルートアプリインジェクタに登録するというサービスは、LazyModuleでインポートする必要はありません。 これは、遅延ロードされたモジュールがすでにルートレベルで定義された サービスにアクセスできるためです。

関連する問題