개발/Web
Data binding
Juyeon Ji
2020. 3. 12. 10:17
- 템플릿(View)과 컴포넌트 클래스의 데이터(Model)을 하나로 묶어 유기적으로 동작하게 함
- jQuery의 경우 DOM 구조가 변경되면(예) <h1>이 <p>로 변경된 경우) 자바스크립트 로직도 변경되야함
: 기존의 웹은 자바스크립트 DOM API를 사용하여 DOM을 직접 조작하는 방식으로, 뷰가 변경되면 로직도 변경해야하는 문제가 있음
- Angular는 DOM에 직접 접근하지 않고 템플릿과 컴포넌트 클래스의 상호 관계를 선언하는 방식(선언형)으로 관리(data binding)
: 템플릿에서 직접 컴포넌트 클래스의 프로퍼티를 참조하기 때문에, DOM구조를 파악할 필요가 없음(예)<h1>이<p>로 변경되어도 컴포넌트 클래스는 변경이 필요 없음)
모델이 변화된 경우
1. DOM event(click, key press, mouse move, ...)
2. Timer 함수(setTimeout, setInterval)의 tick 이벤트
3. Ajax 통신/ Promise
7가지 데이터 바인딩(단방향: One-way data binding, 양방향: Two-way data binding)
- 인터폴레이션(컴포넌트 클래스 -> 탬플릿)
{{ expression }}
- 프로퍼티 바인딩(컴포넌트 클래스 -> 탬플릿)
[property]=”expression”
- 어트리뷰트 바인딩(컴포넌트 클래스 -> 탬플릿)
[attr.attribute-name]=”expression”
- 클래스 바인딩(컴포넌트 클래스 -> 탬플릿)
[class.class-name]=”expression”
- 스타일 바인딩(컴포넌트 클래스 -> 탬플릿)
[style.style-name]=”expression”
- 이벤트 바인딩(컴포넌트 클래스 <- 탬플릿)
(event)=”statement”
- 양방향 데이터 바인딩(컴포넌트 클래스 <-> 탬플릿)
[(ngModel)]=”property”