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