Jika Anda menggunakan FormBuilder
, lihat jawaban @ dfsq.
Jika Anda tidak menggunakan FormBuilder
, ada dua cara untuk diberitahu tentang perubahan.
Metode 1
Seperti dibahas dalam komentar pada pertanyaan, gunakan peristiwa yang mengikat pada setiap elemen input. Tambahkan ke templat Anda:
<input type="text" class="form-control" required [ngModel]="model.first_name"
(ngModelChange)="doSomething($event)">
Kemudian di komponen Anda:
doSomething(newValue) {
model.first_name = newValue;
console.log(newValue)
}
The Bentuk Halaman memiliki beberapa informasi tambahan tentang ngModel yang relevan di sini:
Ini ngModelChange
bukan <input>
acara elemen. Ini sebenarnya merupakan properti acara dari NgModel
arahan. Ketika Angular melihat target yang mengikat dalam formulir [(x)]
, ia mengharapkan x
arahan untuk memiliki x
properti input dan xChange
properti output.
Keanehan lainnya adalah ekspresi template model.name = $event
,. Kami terbiasa melihat $event
objek yang berasal dari acara DOM. Properti ngModelChange tidak menghasilkan acara DOM; ini adalah EventEmitter
properti Angular yang mengembalikan nilai kotak input saat diaktifkan ..
Kami hampir selalu lebih suka [(ngModel)]
. Kami mungkin membagi penjilidan jika kami harus melakukan sesuatu yang istimewa dalam penanganan acara seperti debounce atau throttle stroke kunci.
Dalam kasus Anda, saya kira Anda ingin melakukan sesuatu yang istimewa.
Metode 2
Tentukan variabel templat lokal dan setel ke ngForm
.
Gunakan ngControl pada elemen input.
Dapatkan referensi ke arahan NgForm formulir menggunakan @ViewChild, kemudian berlangganan ControlGroup NgForm untuk perubahan:
<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
Untuk informasi lebih lanjut tentang Metode 2, lihat video Savkin .
Lihat juga @ jawaban Thierry untuk informasi lebih lanjut tentang apa yang dapat Anda lakukan dengan yang valueChanges
dapat diamati (seperti melonggarkan / menunggu sedikit sebelum memproses perubahan).