를 사용하는 경우 FormBuilder
@dfsq의 답변을 참조하십시오.
를 사용하지 않는 경우 FormBuilder
변경 사항을 알리는 두 가지 방법이 있습니다.
방법 1
질문에 대한 의견에서 논의했듯이 각 입력 요소에 이벤트 바인딩 을 사용하십시오 . 템플릿에 추가하십시오.
<input type="text" class="form-control" required [ngModel]="model.first_name"
(ngModelChange)="doSomething($event)">
그런 다음 구성 요소에서
doSomething(newValue) {
model.first_name = newValue;
console.log(newValue)
}
양식 페이지는 여기에 관련 ngModel에 대한 몇 가지 추가 정보가 있습니다 :
은 ngModelChange
없는 <input>
요소 이벤트입니다. 실제로 NgModel
지시문 의 이벤트 속성입니다 . Angular는 형식의 바인딩 대상을 볼 때 지시문에 입력 속성과 출력 속성 이 [(x)]
있을 것으로 예상합니다 .x
x
xChange
다른 이상한 점은 템플릿 표현식 model.name = $event
입니다. 우리는 $event
DOM 이벤트에서 객체가 나오는 것을 보았습니다 . ngModelChange 속성은 DOM 이벤트를 생성하지 않습니다. EventEmitter
실행시 입력 상자 값을 반환 하는 Angular 속성입니다.
우리는 거의 항상 선호합니다 [(ngModel)]
. 디 바운스 나 키 스트로크 조절과 같은 이벤트 처리에서 특별한 작업을 수행해야하는 경우 바인딩을 분할 할 수 있습니다.
귀하의 경우, 나는 당신이 특별한 것을하고 싶다고 생각합니다.
방법 2
로컬 템플릿 변수를 정의하고로 설정하십시오 ngForm
.
입력 요소에 ngControl을 사용하십시오.
@ViewChild를 사용하여 폼의 NgForm 지시문에 대한 참조를 얻은 다음 변경을 위해 NgForm의 ControlGroup에 가입하십시오.
<form #myForm="ngForm" (ngSubmit)="onSubmit()">
....
<input type="text" ngControl="firstName" class="form-control"
required [(ngModel)]="model.first_name">
...
<input type="text" ngControl="lastName" class="form-control"
required [(ngModel)]="model.last_name">
class MyForm {
@ViewChild('myForm') form;
...
ngAfterViewInit() {
console.log(this.form)
this.form.control.valueChanges
.subscribe(values => this.doSomething(values));
}
doSomething(values) {
console.log(values);
}
}
plunker
방법 2에 대한 자세한 내용은 Savkin의 비디오를 참조하십시오 .
valueChanges
옵저버 블로 수행 할 수있는 작업 (예 : 변경 처리 전 약간의 수신 거부 / 대기) 에 대한 자세한 내용은 @Thierry의 답변을 참조하십시오 .