0. constructor
컴포넌트나 디렉티브가 생성된 후에는 생성자가 제일 먼저 실행된다.
ngOnChanges()
입력 프로퍼티 값(@Input)을 설정할 때 실행된다. (입력 프로퍼티 값이 모두 반영된 이후)
입력 프로퍼티 값이 바뀔때마다 실행된다.
이전 값과 현재 값을 확인할 수 있다.
ngOnInit()함수가 실행되기 전에 먼저 실행된다.
ngOnChanges(changes: SimpleChanges) {
for (let propName in changes) {
let chng = changes[propName];
let cur = JSON.stringify(chng.currentValue);
let prev = JSON.stringify(chng.previousValue);
this.changeLog.push(${propName}: currentValue = ${cur}, previousValue = ${prev}
);
}
}
SimpleChange 타입의 객체를 인자로 받는다.
입력 프로퍼티의 이전 값과 현재 값이 포함되어 있다.
@Input으로 객체가 전달되면 값은 객체의 참조값으로 할당되기에 객체 안의 내용은 Angular가 변경을 추적하지 못한다. 객체로 인자를 전달했을 때는 참조하는 주소 자체가 변경되지 않으면 변경된 것으로 처리하지 않는다.
ngOnInit()
ngDoCheck()
ngAfterContentInit()
ngAfterContentChecked()
ngAfterViewInit()
ngOnDestroy()
OnChanges, DoCheck, AfterContentChecked, AfterViewChecked 에는 간결한 로직만 작성하는 것이 좋다.
라이프싸이클 후킹 함수를 활용하면 컴포넌트에서 생성하는 DOM 객체에 직접 접근할 수 있다.(수정 x , DOM객체 확인만 가능)
디렉티브가 생성되고 종료되는 시점은 디렉티브가 적용된 엘리먼트가 생성되고 종료되는 시점과 같다.
<div *ngFor="let hero of heroes" mySpy class="heroes">
{{hero}}
</div>
컴포넌트 생성자는 최대한 간결하게 작성한다.
Misko Hevery(angular 팀 리더)가 말하는 생성자를 간단히 작성해야하는 이유
서버에서 데이터를 받아오는 로직은 컴포넌트 생성자에서 작성하지 않는다.