La question porte sur le service personnalisé dans le décorateur @Component en Angular, particulièrement lorsqu'il est spécifié dans la section 'providers'. Si vous fournissez un service personnalisé dans cette section pour deux composants, deux instances de ce service sont créées. C'est-à-dire, chaque composant obtient sa propre instance du service et n'est pas partagée entre les composants.
Considérons que vous ayez un service personnalisé, MonService
, et deux composants, MonComposant1
et MonComposant2
. Si vous fournissez MonService
dans la section 'providers' du décorateur @Component des deux composants, chaque composant aura sa propre instance de MonService
. Par exemple:
import { Component } from '@angular/core';
import { MonService } from './mon.service';
@Component({
selector: 'mon-composant1',
providers: [MonService]
})
export class MonComposant1 {
constructor(private monService: MonService) {}
}
@Component({
selector: 'mon-composant2',
providers: [MonService]
})
export class MonComposant2 {
constructor(private monService: MonService) {}
}
Dans cet exemple, MonComposant1
et MonComposant2
ont chacune une instance distincte de MonService
.
Il est important de noter que la fourniture de services de cette manière peut ne pas être toujours la meilleure pratique. Si vous avez besoin que les composants partagent des données via le service, vous risquez d'avoir une incohérence des données car chaque composant travaille avec une instance de service différente.
Il est en général préférable de fournir le service dans le module racine (AppModule
). En faisant cela, Angular crée une seule instance du service qui est partagée par tous les composants qui l'injectent. C'est un concept connu sous le nom de "singleton service".
import { MonService } from './mon.service';
@NgModule({
providers: [MonService]
})
export class AppModule { }
Néanmoins, il existe des situations où vous voudriez que chaque composant ait sa propre instance de service, par exemple, si vous voulez que chaque composant ait son propre état. Dans ce cas, la fourniture de votre service dans la section 'providers' du décorateur @Component de chaque composant serait la bonne approche.