私は最近、私の単一のAppModule
を複数のモジュールに分割しましたが、今はモジュールを遅延ロードして共有モジュールのシングルトンサービスを使用しようとしています。遅延ロードされたモジュールではシングルトンサービスが利用できません
in the docs(同様に)の手順に従って、シングルトンサービスを提供する共有CoreModule
を作成しました。共有モジュールのサービスの一つが、シングルトンサービスのいずれかを注入しようとしたときただし、以下の例外がスローされます。
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 { }
は、私は怠惰なロードされたモジュールMailGroupModule
、Iドンに共有モジュールCoreModule
をインポートするときにということですparentModule
引数が常にnull
であるため、(コンストラクタ内でthrow new Error(...)
にもかかわらず)例外が発生しません。
私はここで何かが分かりませんか?