2017-10-17 2 views
2

Lorsque j'ai lu récemment doc de la Angular2, il est dit comme ceci:Est-ce que le module chargé deux fois dans le module Lazy charge

si j'importer le même module deux fois?

Ce n'est pas un problème. Lorsque trois modules importent tous le module 'A', Angular évalue le module 'A' une fois, la première fois qu'il le rencontre, et ne le fait pas à nouveau.

C'est vrai au niveau A qui apparaît dans une hiérarchie de modules importés. > Lorsque le Module 'B' importe le Module 'A', le Module 'C' importe 'B' et le Module 'D' importe [C, B, A], alors 'D' déclenche l'évaluation de 'C', ce qui déclenche le évaluation de «B», qui évalue «A». Lorsque Angular arrive au 'B' et 'A' dans 'D', ils sont déjà mis en cache et prêts à aller.

angulaire ne pas comme des modules avec des références circulaires, alors ne laissez pas le module « A » ......

Mais je suppose que ce qui précède est indiqué dans le contexte de tous Eager Modules de chargement . Je doute que cela soit vrai dans un module de chargement Lazy, par exemple, si AppModule et un module de fonction de chargement paresseux importent tous deux un même module (par exemple ModuleA), ModuleA serait-il chargé deux fois? Ce que je pense être: deux instance de module de type ModuleA serait créé lorsque AppModule et le chargement de module de chargement paresseux. Est-ce que ma compréhension est correcte? Quelqu'un pourrait-il m'aider à le clarifier? Merci d'avance.

Répondre

1

Selon l'expérience que j'ai faite, lorsque j'importe le même module dans un module Lazy-Load, lorsque cette charge paresseuse est chargée, je peux voir que le constructeur de ce module partagé est à nouveau appelé. Donc, cela répond à ma question, la réponse est oui. Si quelqu'un a une opinion différente, veuillez le signaler.

1

On ne sait pas ce que vous voulez dire par "chargé".

Angular ne le charge pas deux fois depuis le serveur. Dans les utilisations suivantes, il l'utilise à partir du cache.

Si vous voulez dire si plusieurs instances sont créées en mémoire, alors oui.

Les modules chargés paresseux créent une nouvelle portée enfant pour l'injection de dépendances. Si un module est paresseux chargé par un autre module qui était lui-même chargé paresseux, la hiérarchie des étendues DI n'aurait pas de sens.

RootScope (AppModule) 
    / \ 
    LazyA LazyB 
    /  \ 
    LazyC  LazyC 

S'il n'y avait qu'une seule instance de LazyC cela obligerait les fournisseurs de LazyA et LazyB être disponibles à LazyC. Que se passe-t-il si LazyB ne sera jamais chargé? Puis ajouter les fournisseurs n'aurait pas de sens. Angular ne peut pas non plus mettre à jour les fournisseurs après la création d'une étendue.

C'est la raison pour laquelle les modules chargés paresseux introduisent une nouvelle portée enfant. Leurs fournisseurs ne sont pas ajoutés à RootScope comme c'est le cas avec tous les modules chargés non-paresseux. Par conséquent créer une nouvelle instance est la seule façon.

À mon avis, cela ne cause pas de mal si. À l'exception de la portée DI, je ne vois pas comment cela ferait une différence.