【问题标题】:How to share services - NgModule - Angular2如何共享服务 - NgModule - Angular2
【发布时间】:2018-01-04 19:09:28
【问题描述】:
我知道在 Angular2 中,一个模块提供的服务对其他模块可用,并且应该只提供一次。
我有一个延迟加载的 MessengerModule,它导入了一个 MessengerService。我还有一个 HeaderModule,它只需要这个服务来更新消息通知。
我看到了两种方式:
- 在 AppModule 级别提供 MessengerService
- 在 MessengerModule 中提供 MessengerService。在 HeaderModule 中导入 MessengerModule。
在 1 中,通过删除 MessengerModule 的逻辑服务来“破坏”它是很烦人的。
2、我会失去MessengerModule的懒加载特性,这个特性是相当大的。由于 HeaderModule 是预先加载的,所以 Messenger 也一样,对吗?
似乎最好的选择是在主级别提供服务。你有哪些建议?
【问题讨论】:
标签:
angular
angular-services
【解决方案1】:
您应该阅读this 文章。
它涉及:
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 {}
由于 SharedModule 仅包含 Angular 注册的服务
在根应用程序注入器中,我们不需要在 LazyModule 中导入它。
这是因为延迟加载的模块已经可以访问
在根级别定义的服务。