关于Angular和功能模块。
根据这个:
当我们在应用程序根模块急切加载的功能模块中提供服务时,每个人都可以注入该服务。
这是否意味着此功能的所有组件都可以使用?或其他功能模块的所有组件?
我们在功能模块中有服务,我们可以在其他功能模块中注入此服务。
我们的功能模块提供服务:
@NgModule({
imports: [SharedModule],
declarations: [FeatureAComponent],
exports: [FeatureAComponent],
providers: [FeatureAService]
})
export class FeatureAModule { }
我们的功能模块没有服务:
@NgModule({
imports: [SharedModule],
declarations: [FeatureBComponent],
exports: [FeatureBComponent],
providers: []
})
export class FeatureBModule { }
这里发生的事情是,我正在 FeatureBComponent 中注入 FeatureAService ,它正在运作,为什么?我原以为它不起作用。
答案 0 :(得分:4)
好的,现在我明白了。除非我理解错了。
由于我的功能模块是在根模块中导入的,因此它使我的提供程序可用于所有其他功能模块。
https://angular.io/guide/ngmodule#!#service-providers
官方NgModule FAQs中更具体的解释:
在引导模块的
@NgModule.providers
中列出的提供商 有适用范围。添加服务提供商@NgModule.providers
有效地将服务发布给整个服务 应用导入模块时,Angular会添加模块的服务提供商 (其提供者列表的内容)到应用程序根注入器。
这使得提供程序对应用程序中的每个类都可见 知道提供者的查找令牌。