Aby uzupełnić nieco więcej poprzednich świetnych odpowiedzi, musisz mieć świadomość, że formularze wykorzystują obserwowalne do wykrywania i obsługi zmian wartości. To coś naprawdę ważnego i potężnego. Zarówno Mark, jak i dfsq opisali ten aspekt w swoich odpowiedziach.
Observables pozwalają nie tylko na użycie subscribe
metody (coś podobnego do then
metody obietnic w Angular 1). W razie potrzeby możesz przejść dalej, aby zaimplementować niektóre łańcuchy przetwarzania dla zaktualizowanych danych w formularzach.
Chodzi mi o to, że na tym poziomie można określić czas odbicia debounceTime
metodą. Pozwala to odczekać pewien czas przed obsługą zmiany i poprawnie obsłużyć kilka danych wejściowych:
this.form.valueChanges
.debounceTime(500)
.subscribe(data => console.log('form changes', data));
Możesz również bezpośrednio podłączyć przetwarzanie, które chcesz wyzwolić (na przykład asynchroniczne), gdy wartości są aktualizowane. Na przykład, jeśli chcesz obsłużyć wartość tekstową w celu przefiltrowania listy na podstawie żądania AJAX, możesz skorzystać z switchMap
metody:
this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
Możesz nawet posunąć się dalej, łącząc zwrócone obserwowalne bezpośrednio z właściwością swojego komponentu:
this.list = this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
i wyświetl go za pomocą async
potoku:
<ul>
<li *ngFor="#elt of (list | async)">{{elt.name}}</li>
</ul>
Powiem tylko, że musisz pomyśleć o sposobie obsługi formularzy w inny sposób w Angular2 (o wiele potężniejszy sposób ;-)).
Mam nadzieję, że ci to pomoże, Thierry