J'ai consulté la documentation officielle d'angular sur NgModule ( https://angular.io/guide/ngmodule#configure-core-services-with-coremoduleforroot ) et dans l'exemple fourni à la fin de la page, il y a le fichier core.module.ts
import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TitleComponent } from './title.component';
import { UserService } from './user.service';
import { UserServiceConfig } from './user.service';
@NgModule({
imports: [ CommonModule ],
declarations: [ TitleComponent ],
exports: [ TitleComponent ],
providers: [ UserService ]
})
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(config: UserServiceConfig): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
{provide: UserServiceConfig, useValue: config }
]
};
}
}
Il s'agit d'un module de base, et en utilisant le constructeur et la méthode forRoot nous sommes sûrs que le module de base n'est importé qu'une seule fois, et que nous n'avons qu'une seule instance des services fournis.
- Quelle est la différence entre le tableau de fournisseurs dans le @NgModule({...}) et le tableau de fournisseurs dans la méthode forRoot ?
- Dois-je fournir mes services singleton dans la section @NgModel ou dans le module de base ?