我知道在 Angular2 中,模块提供的服务可供其他模块使用,并且应该只提供一次。
我有一个延迟加载的MessengerModule,它导入了一个MessengerService。我还有一个标题模块,它只需要此服务来更新消息通知。
我看到两种方式:
- 在应用模块级别提供信使服务
- 在 MessengerModule 中提供信使服务。在标头模块中导入信使模块。
在 1 中,通过删除其逻辑服务来"破坏"信使模块很烦人。 在 2 中,我将失去 MessengerModule 的延迟加载功能,该功能非常大。由于 HeaderModule 急于加载,Messenger 也会一样吗?
似乎最好的选择是在主要级别提供服务。您的建议是什么?
你应该阅读这篇文章。
它涉及: app/shared/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/app.module.ts
import { SharedModule } from './shared/shared.module';
@NgModule({
imports: [
SharedModule.forRoot(),
...
],
...
})
export class AppModule {}
由于共享模块仅包含Angular寄存器的服务 在根应用注入器中,我们不需要在 LazyModule 中导入它。 这是因为延迟加载的模块已经可以访问 在根级别定义的服务。