Para concluir um pouco mais das excelentes respostas anteriores, você precisa estar ciente de que os formulários aproveitam os observáveis para detectar e manipular alterações de valor. É algo realmente importante e poderoso. Mark e dfsq descreveram esse aspecto em suas respostas.
Observáveis permitem não apenas usar o subscribe
método (algo semelhante aothen
método de promessas no Angular 1). Você pode ir além, se necessário, para implementar algumas cadeias de processamento para dados atualizados em formulários.
Quero dizer, você pode especificar nesse nível o tempo de debounce com o debounceTime
método Isso permite que você aguarde um tempo antes de manipular a alteração e manipular corretamente várias entradas:
this.form.valueChanges
.debounceTime(500)
.subscribe(data => console.log('form changes', data));
Você também pode conectar diretamente o processamento que deseja acionar (por exemplo, um assíncrono) quando os valores forem atualizados. Por exemplo, se você quiser manipular um valor de texto para filtrar uma lista com base em uma solicitação AJAX, poderá aproveitar oswitchMap
método:
this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
Você vai além, vinculando o observável retornado diretamente a uma propriedade do seu componente:
this.list = this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
e exiba usando o async
pipe:
<ul>
<li *ngFor="#elt of (list | async)">{{elt.name}}</li>
</ul>
Apenas para dizer que você precisa pensar na maneira de lidar com formas de maneira diferente no Angular2 (uma maneira muito mais poderosa ;-)).
Espero que ajude você, Thierry