저번에는 간단하게 텍스트를 변경해봤는데 이번엔 제가 입력한대로 타이틀을 변경 시키고 싶습니다.
그런데 app.component.html 에 너무 내용이 많아 모두 삭제하고 다음과 같이 수정!
<input type="text" [(ngModel)]="title">
<h1>{{ title }}</h1>
여기서 [(ngModel)] 이게 뭘까요?
설명하기 전에 데이터바인딩이 뭔지 알아야 하는데 이건 검색하면 수두룩하게 나오니 패스ㅋ 처음 이해하기 쉽게 말하면 말 그대로 데이터를 묶어 일치 시키는 것이라고 생각하면 될 것 같습니다. 이것도 뭔 소린지 모르겠다면 이따가 동작해보면 알게 됩니다!
다시 이 [(ngModel)] 이란 것은 양방향 데이터 바인딩하는데 사용되는 앵귤러 문법입니다. 하지만 찾아보니 정확하게 양방향 바인딩은 아니고 [ngModel]="title", (ngModelChange)="title=$event" 구조의 축약표현이라고 합니다. 결과적으로는 양방향인 것처럼 동작하니 처음엔 그냥 일단은 다 잊어버리고 양방향이라고 생각하면 될 것 같아용ㅎㅎ 앵귤러에 익숙해지면 저절로 알게 될 것들일테니까요!
위 소스대로 수정하고 페이지를 보면 그냥 흰 화면만 보일 겁니다. 당황하지 마시고 크롬 개발자 모드 f12 (크롬쓰세요 크롬ㅎㅎ) 키면
input 의 알려진 속성이 아니라서 ngModel 에 bind 할 수 없다. ngModel 을 제대로 읽지 못하는 것 같습니다. 앵귤러에는 여러 모듈이 있습니다. ngModel 을 사용하기 위해서는 FormsModule 이라는 특정 기능을 추가해야 합니다. 추가하려면 아직 보지 않았던 app.module.ts 로 이동 ㄱㄱ! app.module.ts 파일은 기본적으로 다른 패키지를 가져오는데 사용됩니다.
import { FormsModule } from '@angular/forms';
@NgModule({
...,
imports: [
...,
FormsModule
],
...
})
export class AppModule { }
위 처럼 FormsModule 을 추가! 저장하면 앱이 다시 빌드되고 다음과 같이 화면이 뜹니다.
위 input의 값과 밑에 값이 일치하죠. 이게 ngModel 데이터바인딩입니다! [(ngModel)]="title" 을 함으로써 입력하는 값이 title이 되고 title은 view와 model 이 묶여 값이 일치하도록 합니다. 우앙 신기하당ㅎㅎ
저도 공부하면서 올리는 글이기에 혹시 틀린 부분 있으면 지적해주시면 감사하겠습니다.
이상으로 마치겠습니다.
'choco's log > Angular' 카테고리의 다른 글
(5) 새 컴포넌트 만들기 (0) | 2019.10.01 |
---|---|
(4) Angular 프로젝트에 bootstrap 적용 (0) | 2019.09.25 |
(2) 앵귤러 앱 첫 편집 (0) | 2019.09.23 |
(1) Angular 시작 (0) | 2019.09.04 |
Angular 란? (0) | 2019.09.03 |