Lors de la génération de services dans la CLI angulaire, il ajoute des métadonnées supplémentaires avec une propriété «fourni dans» avec une valeur par défaut «racine» pour le décorateur injectable.
@Injectable({
providedIn: 'root',
})
Que fait exactement fourniIn? Je suppose que cela rend le service disponible comme un service singleton de type `` global '' pour toute l'application, cependant, ne serait-il pas plus propre de déclarer de tels services dans le tableau de fournisseurs de l'AppModule?
METTRE À JOUR:
Pour n'importe qui d'autre, le paragraphe suivant en a également fourni une autre bonne explication, en particulier si vous souhaitez fournir votre service uniquement à un module fonctionnel.
Il existe maintenant un nouveau moyen recommandé pour enregistrer un fournisseur, directement dans le
@Injectable()
décorateur, en utilisant le nouvelprovidedIn
attribut. Il accepte'root'
comme valeur ou tout module de votre application. Lorsque vous utilisez'root'
, votreinjectable
sera enregistré en tant que singleton dans l'application, et vous n'avez pas besoin de l'ajouter aux fournisseurs du module racine. De même, si vous utilisezprovidedIn: UsersModule
, leinjectable
est enregistré comme fournisseur duUsersModule
sans l'ajouter auproviders
module. "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
MISE À JOUR 2:
Après une enquête plus approfondie, j'ai décidé qu'il était seulement utile d'avoir providedIn: 'root'
Si vous voulez provide
un service dans un module autre que le module racine, il vaut mieux utiliser le providers
tableau dans les décorateurs du module de fonctionnalités, sinon vous serez en proie à des dépendances circulaires. Des discussions intéressantes à avoir ici - https://github.com/angular/angular-cli/issues/10170