如何在角度2+应用中提供全局服务(例如提供数据)并从子模块访问它?这里强调的是子模块。我知道它很简单,有一个组件层次结构树,但我找不到任何好的解释如何使用多个模块。
例如,如果我们有以下app结构/层次结构:
AppModule
myservice
AppComponent
FeatureModule1
ComponentA
ComponentB
FeatureModule2
ComponentC
ComponentD
FeatureModule3
ComponentE
我必须在哪里提供服务?只是在AppModule
或在子模块中FeatureModule1
,FeatureModule2
和FeatureModule3
)?关于进口的同样问题。
仅在根级别导入和提供功能不起作用(例如FeatureModule1
无法访问所提供的myservice
实例,直到我经历过。)
我是否必须在每个层次结构级别上重新导入(最终重新提供)?
答案 0 :(得分:2)
您必须在定义服务的模块中实现forRoot(),或在AppModule中定义它。不要在多个模块中提供服务,因为这将创建多个实例。我首选的方法是创建一个SharedModule,它提供所有这样的共享服务:
@NgModule({
imports: [ ... ]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
MyService
]
};
}
}
在我的AppModule中,我使用forRoot()导入它:
@NgModule({
declarations: [ ... ],
imports: [
...
SharedModule.forRoot()
],
providers: [ ... ],
bootstrap: [AppComponent]
})
export class AppModule { }
在所有其他模块中,我只需要在没有foorRoot的情况下导入它。