Combien d'instances de service seront créées si vous fournissez un service personnalisé dans la section 'providers' du décorateur @Component de deux composants ?

Utilisation de la section 'providers' dans le décorateur @Component

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.

Exemple pratique

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.

Meilleures pratiques

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.

Related Questions

Trouvez-vous cela utile?