我一直在Angular 8中实现一个使用延迟加载的新应用。但是,我遇到了一个直到现在才意识到的问题。也就是说,在延迟加载的模块中加载的服务将创建它自己的服务实例。如果我有两个使用相同服务的延迟加载模块,则该服务将加载两次。我已经阅读了许多有关堆栈溢出的问题,其中包括:How do I provide a service in a lazy-loaded module and have that service scoped to just the lazy-loaded module and its components?.
我希望有人可以帮助我解决我的特定要求/实施。
我有一个分屏的应用程序。
在我的 app-routing.module.ts 中,我懒加载了screen-one.module
和screen-two.module
{ path: 'folders', loadChildren: '../app/screens/screen-one/screen-one.module#ScreenOneModule' },
{ path: 'folders/:folderID/projects/:projectID', loadChildren: '../app/screens/screen-two/screen-two.module#ScreenTwoModule' }
screen-one.module.ts
在此模块中,我将导入另外两个模块(文件夹,项目列表),其中包含我需要在screen-one.component.html
中使用的组件,并显示为<app-folders></app-folders>
和<app-projects></app-projects>
>
const routes: Routes = [
{
path: '',
component: ScreenOneComponent,
children: [
{
path: ':folderID/projects',
component: ScreenOneComponent,
}
]
},
]
@NgModule({
declarations: [
ScreenOneComponent
],
imports: [
CommonModule,
RouterModule.forChild(routes),
FoldersModule,
ProjectsListModule
],
})
我遇到的问题是,我为导入screen-two.module
和ProjectsListModule
的{{1}}进行了类似的设置。
我遇到的问题是,在使用ProjectDetailModule
和FoldersService
时,ProjectsListService
会加载它们,而导航到screen-one.module
时,会再次注入另一个实例
在某些情况下,总共10个屏幕模块中的3个或4个将需要访问这些服务。
更新
我已经删除了与screen-two.module
和ProjectsListModule
相关的所有提供程序,并完全依赖于服务ProjectDetailModule
的功能。但是,当前的含义是,如果我在屏幕10上,那么我将在不需要数据库时让服务查询数据库。当大约3个不同的模块需要一种查询数据库的服务时,不确定如何解决此问题。我希望只有3个模块可以使用它,但不要有3个实例。