Se stai usando FormBuilder
, vedi la risposta di @ dfsq.
Se non si utilizza FormBuilder
, ci sono due modi per essere avvisati delle modifiche.
Metodo 1
Come discusso nei commenti sulla domanda, utilizzare un'associazione di eventi su ciascun elemento di input. Aggiungi al tuo modello:
<input type="text" class="form-control" required [ngModel]="model.first_name"
(ngModelChange)="doSomething($event)">
Quindi nel tuo componente:
doSomething(newValue) {
model.first_name = newValue;
console.log(newValue)
}
La pagina dei moduli contiene alcune informazioni aggiuntive su ngModel rilevanti qui:
L' evento ngModelChange
non è un <input>
elemento. In realtà è una proprietà dell'evento della NgModel
direttiva. Quando Angular vede un target vincolante nel modulo [(x)]
, si aspetta che la x
direttiva abbia una x
proprietà di input e una xChange
proprietà di output.
L'altra stranezza è l'espressione modello, model.name = $event
. Siamo abituati a vedere un $event
oggetto proveniente da un evento DOM. La proprietà ngModelChange non produce un evento DOM; è una EventEmitter
proprietà Angolare che restituisce il valore della casella di input quando viene attivato.
Preferiamo quasi sempre [(ngModel)]
. Potremmo dividere l'associazione se dovessimo fare qualcosa di speciale nella gestione degli eventi come rimbalzare o limitare i tasti.
Nel tuo caso, suppongo che tu voglia fare qualcosa di speciale.
Metodo 2
Definire una variabile di modello locale e impostarla su ngForm
.
Usa ngControl sugli elementi di input.
Ottieni un riferimento alla direttiva NgForm del modulo utilizzando @ViewChild, quindi iscriviti al gruppo di controllo di NgForm per le modifiche:
<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
Per ulteriori informazioni sul metodo 2, vedere il video di Savkin .
Vedi anche la risposta di @ Thierry per maggiori informazioni su cosa puoi fare con l' valueChanges
osservabile (come rimbalzare / aspettare un po 'prima di elaborare le modifiche).