2017-04-06 5 views
8

In Angular 2 mit Ahead-of-Time (AOT) Kompilieren zu zerstören, ich habe eine übergeordnete Komponente und eine untergeordnete Komponente, wie folgt aus:Wann genau ist Angular entscheiden, eine Komponente

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

Ich weiß, dass die Die untergeordnete Vorlage wird dynamisch in das DOM eingefügt. Meine Frage ist, wenn "showChild" zu false ausgewertet wird, wann genau Angular die Kindkomponente zerstört? Oder wird Angular die Kinderkomponente überhaupt zerstören? Ist das die Zeit, die Angular die Methode "onDestroy()" aufruft? Hier

ist eine Aussage, die ich an einen Freund gemacht früher (bitte korrigiert mich wenn ich falsch bin):

Wenn Angular eine Komponente sieht nicht mehr benötigt im DOM, wird es zerstören die Komponente .

Antwort

8

Wenn Angular Läufe Erkennung und die Bindung an den Eingang der ngIfNgIf Richtlinie ändern aktualisiert wird, entfernt NgIf die Komponente aus dem DOM. Nachdem die Komponente aus dem DOM entfernt wurde, wird ngDestroy() aufgerufen und dann ist die Komponente frei, um den Müll zu sammeln.

Wenn die übergeordnete Komponente entfernt wird, während der Ausdruck *ngIf wahr ist, werden das übergeordnete Element und das untergeordnete Element zusammen zerstört. Ich weiß nicht, was zuerst ngDestory() genannt wird.

+0

Wenn die untergeordnete Komponente zerstört wird, wie funktioniert angular mit dem Speicherabdruck? Wie sauber würde die Garbage Collection sein, wenn ich Ereignisse in onDestroy() abbestellen möchte? – gye

+0

Angular ist nicht an der Speicherbereinigung beteiligt. Wenn keine Referenzen auf Ihre Komponente vorhanden sind, sammelt die JS-VM alle zugehörigen Klassen. Angular stellt sicher, dass es sich nach der Zerstörung nicht auf eine Komponente selbst bezieht. –

Verwandte Themen