2017-04-06 17 views
8

を破壊することを決定した(AOT)コンパイルない場合、私はこのように、親コンポーネントと子コンポーネントを持っている:正確に角度が控え-の時に角度2ではコンポーネント

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

私がいることを知っています子テンプレートはDOMに動的に挿入されます。私の質問は、 "showChild"がfalseに評価されたときです。ちょうどAngularが子コンポーネントを破棄しますか?あるいはAngularは子コンポーネントをまったく破棄しますか?それはAngularが "onDestroy()"メソッドを呼び出す時でしょうか?ここで

は、私が以前友人に作られたステートメントは、(私が間違っているなら、私を修正してください)です。

角度は、コンポーネントがもはやDOMで必要とされる見ないとき、それは コンポーネントを破壊します。

答えて

8

角度ランが検出を変更し、NgIf指令のngIf入力に結合更新され、NgIfはDOMから成分を除去します。コンポーネントは、DOM ngDestroy()から削除された後に呼び出され、その後、コンポーネントがガベージコレクションを取得して自由です。

*ngIfの式が真である間に親コンポーネントが削除された場合、親と子は一緒に破棄されます。私はngDestory()が最初に呼び出されたのか分かりません。

+0

子コンポーネントが破棄された場合、角はメモリフットプリントをどのように処理しますか? onDestroy()でイベントの登録を解除して切り離したと仮定すると、ガベージコレクションはどのくらいきれいでしょうか? – gye

+0

角度はガベージコレクションに関係しません。コンポーネントへの参照がない場合、JS VMはすべての関連クラスを収集します。 Angularは、コンポーネントが破棄された後にコンポーネント自体に参照を保持しないようにします。 –

関連する問題