Недавно я разделил свой одиночный AppModule
на несколько модулей, и теперь я пытаюсь лениво загрузить модуль и использовать его для использования однопользовательских сервисов из общего модуля.Службы Singleton недоступны для ленивых загружаемых модулей
Я выполнил указанные шаги in the docs (а также in this tutorial) и создал общий CoreModule
, который предоставляет услуги Singleton. Однако, когда один из сервисов общего доступа модуля пытается внедрить какие-либо из одноэлементных услуг следующее исключение:
EXCEPTION: Uncaught (in promise): Error: No provider for HttpClientService!
Error: No provider for HttpClientService!
at NoProviderError.BaseError [as constructor] (http://localhost:5000/lib/angular/@angular/core/bundles/core.umd.js:1105:38)
app.module.ts
@NgModule({
imports: [
BrowserModule,
CoreModule.forRoot(),
AppRoutingModule
]
})
export class AppModule { }
app-routing.module.ts
export const routes: Routes = [
{
path: "mailgroups",
loadChildren: "app/mailgroup/mailgroup.module#MailGroupModule" // <-- lazy loading the module
}
];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ],
})
export class AppRoutingModule { }
core.module.ts
(общий модуль)
export class CoreModule {
constructor (@Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error("CoreModule is already loaded. Import it in the AppModule only!");
}
}
static forRoot(): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
HttpClientService, // <-- singleton service 1
UserService // <-- singleton service 2
]
};
}
}
mailgroup.module.ts
(ленивый модуль загружен)
@NgModule({
imports: [
MailGroupRoutingModule
]
})
export class MailGroupModule { }
Что интересно, что когда я импортировать общий модуль CoreModule
к ленивому загруженному модулю MailGroupModule
, я не Не получаю никакого исключения (несмотря на throw new Error(...)
в конструкторе), потому что аргумент parentModule
всегда null
.
Я пропустил что-то очевидное здесь? (опущенные заявления, которые я счел ненужными)