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 nouvelprovidedInattribut. Il accepte'root'comme valeur ou tout module de votre application. Lorsque vous utilisez'root', votreinjectablesera 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, leinjectableest enregistré comme fournisseur duUsersModulesans l'ajouter auprovidersmodule. "- 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 provideun service dans un module autre que le module racine, il vaut mieux utiliser le providerstableau 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