Angular5:如何在懒加载特性模块的组件中共享同一个服务实例?
Angular 5: How to share the same instance of a service in the components of a lazy-loaded feature module?
我正在使用 Angular 5,我创建了一个带有路由的功能模块并将其配置为延迟加载。
现在我需要在功能模块内的两个组件之间共享位于功能模块内的同一服务实例,以便在用户单击后将对象从一个组件传递到另一个组件路由器-link.
如果我将要共享的服务放在 app.module.ts 的提供程序数组中,一切都会如我所料。但是,如果我将服务放在 featureModule.module.ts 的提供程序数组中,它就不起作用。
这里是项目的结构:
Questionnaires feature module
所以最后,是否可以通过将服务放在功能模块的提供程序数组中来在功能模块的组件之间共享相同的服务实例,在本例中 [=22] =]?
你可以使用 ModuleWithProviders 创建一个服务单例,你可以定义静态的 forRoot return ModuleWithProviders,你的 sharedService 将在所有延迟加载的模块中有一个实例
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [sharedService]
}
}
}
并且您可以在 app.module 中使用 .forRoot 导入您的共享模块,所有延迟加载的模块都将有一个实例
imports: [
SharedModule.forRoot()
],
我正在使用 Angular 5,我创建了一个带有路由的功能模块并将其配置为延迟加载。 现在我需要在功能模块内的两个组件之间共享位于功能模块内的同一服务实例,以便在用户单击后将对象从一个组件传递到另一个组件路由器-link.
如果我将要共享的服务放在 app.module.ts 的提供程序数组中,一切都会如我所料。但是,如果我将服务放在 featureModule.module.ts 的提供程序数组中,它就不起作用。
这里是项目的结构: Questionnaires feature module
所以最后,是否可以通过将服务放在功能模块的提供程序数组中来在功能模块的组件之间共享相同的服务实例,在本例中 [=22] =]?
你可以使用 ModuleWithProviders 创建一个服务单例,你可以定义静态的 forRoot return ModuleWithProviders,你的 sharedService 将在所有延迟加载的模块中有一个实例
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [sharedService]
}
}
}
并且您可以在 app.module 中使用 .forRoot 导入您的共享模块,所有延迟加载的模块都将有一个实例
imports: [
SharedModule.forRoot()
],