2017-08-31 2 views
1

グローバルサービス(例えばデータの提供)を提供し、の角度2+アプリでサブモジュールからアクセスするにはどうすればよいですか?ここでは、サブモジュールに重点が置かれています。私はそれがコンポーネント階層ツリーでかなり簡単だと知っていますが、それが複数のモジュールでどのように機能するかは分かりません。例えば角2+:サブモジュールへのグローバルサービスの単一インスタンスを提供する

、我々は次のアプリの構造/階層がある場合:私は、サービスを提供しなければならないの

AppModule 
    myservice 
    AppComponent 
    FeatureModule1 
    ComponentA 
    ComponentB 
    FeatureModule2 
    ComponentC 
    ComponentD 
    FeatureModule3 
     ComponentE 

を? AppModuleまたはサブモジュール(FeatureModule1,FeatureModule2およびFeatureModule3)にもありますか?同じ質問をインポートすること。 ルートレベルでのみインポートして提供することはできません(FeatureModule1は、私が経験した限り、提供されたmyserviceインスタンスへのアクセス権がありません) 再インポート(最終的に再提供)すべての階層レベルで?

答えて

2

サービスを定義したモジュールでforRoot()を実装するか、AppModuleで定義する必要があります。複数のインスタンスを作成するため、複数のモジュールでサービスを提供しないでください。 )私はforRoot(とそれをインポートする私のAppModuleで

@NgModule({ 
    imports: [ ... ] 
}) 
export class SharedModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: SharedModule, 
     providers: [ 
     MyService 
     ] 
    }; 
    } 
} 

:私の好ましい方法は、このようなすべての共有サービスを提供SharedModuleを作成することです

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

そして他のすべてのモジュールで、私は持っていますfoorRootを使用せずにインポートします。

+0

お返事ありがとうございます。理解を深めるために、 'FeatureModule2'で既にインポートされていても、SharedModuleを' FeatureModule3'でもインポートする必要があります。つまり、モジュールインポートはサブモジュールに伝播されません。 – phev8

+1

モジュールのインポートは、サブモジュールに伝播されます。しかし、それをあなたのサブモジュールに再度 をインポートすることを傷つけることはありませんので、将来的に構造を変えることができます。 –

関連する問題