2017-04-06 2 views
8

Dans angulaire 2 avec l'avant-de-temps (AOT) la compilation, j'ai un composant parent et un composant enfant, comme celui-ci:Quand exactement angulaire décide de détruire un élément

<div> 
    <h1>I am a parent</h1> 
    <myChild *ngIf="showChild"></myChild> 
</div> 

Je sais que les Le modèle enfant est inséré dynamiquement dans le DOM. Ma question est quand "showChild" est évalué à faux, quand exactement Angular détruit le composant enfant? Ou Angular détruira-t-il le composant enfant? Est-ce le moment où Angular invoque la méthode "onDestroy()"?

Voici une déclaration que je fis à un ami plus tôt (s'il vous plaît me corriger si je me trompe):

Lorsque angulaire voit un élément est plus nécessaire dans les DOM, il va détruire le composant .

Répondre

8

Lorsque angulaire fonctionne la détection du changement et la liaison à l'entrée ngIf de la directive NgIf est mis à jour, NgIf supprime le composant du DOM. Une fois que le composant a été supprimé du DOM, le composant ngDestroy() est appelé, puis le composant est libre de récupérer les données collectées.

Si le composant parent est supprimé alors que l'expression *ngIf est vraie, le parent et l'enfant seront détruits ensemble. Je ne sais pas ce que ngDestory() est appelé en premier lieu.

+0

Si le composant enfant est détruit, comment l'angle affecte-t-il l'empreinte mémoire? À quel point la récupération de place sera-t-elle propre, en supposant que j'ai désabonné et détaché des événements dans onDestroy()? – gye

+0

Angular n'est pas impliqué dans le ramassage des ordures. S'il n'y a aucune référence à votre composant, la machine virtuelle JS collecte toutes les classes associées. Angular assure qu'il ne contient aucune référence à un composant après sa destruction. –