2017-04-06 11 views
8

은 2 각도 앞서-의-시간 (AOT) 나는이 같은 부모 구성 요소 및 하위 구성 요소를 가지고 컴파일 구성 요소 파괴하기로 결정 않는 경우 :정확하게 각도가에서

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

내가 알고에게 하위 템플릿은 DOM에 동적으로 삽입됩니다. 내 질문은 "showChild"가 false로 평가 될 때 Angular가 자식 구성 요소를 정확히 파괴 할 때입니까? 아니면 Angular가 하위 구성 요소를 전혀 파기하지 않습니까? 그 시간 Angular는 "onDestroy()"메서드를 호출합니까? 여기

은 (만약 내가 잘못 나 수정하시기 바랍니다) 앞에서 친구로 만든 문이다

각도는 구성 요소가 더 이상 DOM에 필요한 볼 수 없습니다

, 그것은 구성 요소를 파괴 할 것이다 . 각도 실행 탐지를 변경하고 업데이트하는 NgIf 지침의 ngIf 입력에 결합하면

답변

8

NgIf는 DOM에서 구성 요소를 제거한다. 구성 요소가 DOM에서 제거 된 후 ngDestroy()이 호출 된 다음 구성 요소에서 가비지 수집 가능

표현식이 *ngIf 인 동안 부모 구성 요소가 제거되면 부모와 자식이 함께 파괴됩니다. 나는 무엇을 ngDestory()이 먼저 호출되는지 모르겠다.

+0

하위 구성 요소가 파괴 된 경우 각도가 메모리 사용 공간을 어떻게 처리합니까? onDestroy()에서 이벤트 구독을 취소하고 분리했다고 가정 할 때 가비지 수집은 얼마나 깨끗합니까? – gye

+0

각도는 가비지 수집과 관련이 없습니다. 구성 요소에 대한 참조가 없으면 JS VM은 모든 관련 클래스를 수집합니다. Angular를 사용하면 구성 요소가 파괴 된 후에 참조 자체가 유지되지 않습니다. –