web-dev-qa-db-fra.com

Angular 6 Services: fournisDans: 'racine' vs CoreModule

Avec Angular 6, voici le moyen privilégié de créer des services singleton:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class UserService {
}

Dans Angular doc: Lorsque vous fournissez le service au niveau racine, Angular crée une seule instance partagée de HeroService et s'injecte dans toute classe qui le demande. L'enregistrement du fournisseur dans les métadonnées @Injectable permet également à Angular d'optimiser une application en supprimant le service s'il s'avère qu'il n'est pas utilisé après tout.

Également,

providers: [
    // no need to place any providers due to the `providedIn` flag...
  ]

Donc, cela signifie-t-il que nous n’avons plus besoin de CoreModule ? Nous pouvons importer des services et d’autres modules communs directement dans AppModule.

22
Manish Jain

Et qu'en est-il des intercepteurs et des gardes? Ces choses peuvent être globales, je suppose. Je suis d’accord avec votre réflexion sur le fait que CoreModule n’a pas de déclaration, mais uniquement des services purs, mais je pense que les gardes et les intercepteurs devraient également faire preuve de considération.

1

Cela serait vrai si le CoreModule ne contenait que des services. Cependant, il inclut d'autres éléments tels que des composants à usage unique.

De angular docs:

Rassemblez des composants à usage unique et à l'échelle de l'application dans le CoreModule. Importez-le une fois (dans le module d'application) au démarrage de l'application et ne l'importez jamais ailleurs. (par exemple, NavComponent et SpinnerComponent).

1
m4design

Je conserverais toujours CoreModule pour les composants à usage unique et les intercepteurs Http. La propriété providedIn est désormais la méthode recommandée pour enregistrer les services singleton. Pour plus de clarté, je placerais tous mes services singleton dans le répertoire core/services. 

0
ahmedjaad