Um ein bisschen mehr frühere großartige Antworten zu vervollständigen, müssen Sie sich bewusst sein, dass Formulare Observable nutzen, um Wertänderungen zu erkennen und zu verarbeiten. Es ist etwas wirklich Wichtiges und Mächtiges. Sowohl Mark als auch dfsq haben diesen Aspekt in ihren Antworten beschrieben.
Mit Observablen kann nicht nur die subscribeMethode verwendet werden (ähnlich thender Versprechensmethode in Winkel 1). Bei Bedarf können Sie einige Verarbeitungsketten für aktualisierte Daten in Formularen implementieren.
Ich meine, Sie können auf dieser Ebene die Entprellzeit mit der debounceTimeMethode angeben . Auf diese Weise können Sie einige Zeit warten, bevor Sie die Änderung vornehmen, und mehrere Eingaben korrekt verarbeiten:
this.form.valueChanges
.debounceTime(500)
.subscribe(data => console.log('form changes', data));
Sie können die Verarbeitung, die Sie auslösen möchten (z. B. eine asynchrone), auch direkt anschließen, wenn Werte aktualisiert werden. Wenn Sie beispielsweise einen Textwert verarbeiten möchten, um eine Liste basierend auf einer AJAX-Anforderung zu filtern, können Sie die folgende switchMapMethode nutzen:
this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
Sie gehen sogar noch weiter, indem Sie das zurückgegebene Observable direkt mit einer Eigenschaft Ihrer Komponente verknüpfen:
this.list = this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
und zeigen Sie es mit der async Pipe an:
<ul>
<li *ngFor="#elt of (list | async)">{{elt.name}}</li>
</ul>
Um nur zu sagen, dass Sie überlegen müssen, wie Sie mit Formularen in Angular2 anders umgehen können (eine viel leistungsfähigere Methode ;-)).
Hoffe es hilft dir, Thierry