3 votes

Est-ce que le composant Angular du module chargé paresseusement obtient une copie du service global ?

Angular docs Je ne suis pas sûr de comprendre

Angulaire documentation des fournisseurs États :

Lorsque le routeur Angular charge un module paresseusement, injecteur. Cet injecteur est un enfant de l'injecteur de l'application Root. Imaginez un arbre d'injecteurs ; il y a un seul injecteur Root et ensuite un injecteur enfant pour chaque module chargé paresseusement. Le routeur ajoute tous les fournisseurs de l'injecteur racine à l'injecteur enfant. Lorsque le routeur crée un composant dans le contexte lazy-loaded, Angular préfère les instances de service créées à partir de ces fournisseurs au service de l'injecteur racine de l'application.

Tout composant créé dans le contexte d'un module chargé paresseusement, tel que par la navigation du routeur, obtient l'instance locale du service, et non l'instance de l'injecteur d'application Root. dans l'injecteur de l'application racine. C continuent à recevoir l'instance créée pour l'application Racine.

Question

Cela signifie-t-il que lorsque j'accède à un fournisseur déclaré globalement dans un module chargé paresseusement, j'accède à sa copie, qui est distincte de l'instance créée dans l'injecteur de racine ?

Supposons que je sois confronté à deux situations :

Situation A

  • Module racine AppModule
    • fournit ProviderX
    • déclare AppComponent
      • injecte ProviderX
  • module chargé paresseusement SubpageModule
    • pas de fournisseurs
    • déclare SubpageComponent
      • injecte ProviderX

Situation B

  • Module racine AppModule
    • fournit ProviderX
    • déclare AppComponent
      • injecte ProviderX
  • module chargé paresseusement SubpageModule
    • fournit ProviderX
    • déclare SubpageComponent
      • injecte ProviderX

Dans la situation A, l'instance de ProviderX en SubpageComponent est la même instance que dans AppComponent ou un autre ? Je comprends que dans la situation B, ce n'est pas le cas.

5voto

Günter Zöchbauer Points 21340

Situation A

AppComponent et SubpageComponent obtiennent l'attribut même cas injecté

Situation B

AppComponent et SubpageComponent obtiennent différentes instances injecté

Avec votre configuration, vous obtenez une hiérarchie d'injecteurs comme

- AppModule
 |- AppComponent
 |- SubPageModule
   |- SubpageComponent

Angular recherche à partir de l'endroit où il doit injecter une valeur l'arborescence vers le haut jusqu'à ce qu'il trouve le premier fournisseur correspondant. Il injecte ensuite l'instance fournie par le premier fournisseur trouvé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X