Biraz daha önceki harika cevapları tamamlamak için, değer değişikliklerini tespit etmek ve işlemek için gözlemlenebilir özelliklerden yararlandığını bilmeniz gerekir. Gerçekten önemli ve güçlü bir şey. Hem Mark hem de dfsq bu yönü cevaplarında anlattılar.
Gözlemlenebilirler sadece subscribeyöntemi kullanmaya izin vermez ( thenAçısal 1'deki vaat yöntemine benzer bir şey ). Formlardaki güncellenmiş veriler için bazı işleme zincirlerini uygulamak için gerekirse daha da ileri gidebilirsiniz.
Demek istediğim, bu seviyede geri dönme süresini debounceTimeyöntemle belirtebilirsiniz . Bu, değişikliği işlemeden önce bir süre beklemenizi ve birkaç girişi doğru şekilde işlemenizi sağlar:
this.form.valueChanges
.debounceTime(500)
.subscribe(data => console.log('form changes', data));
Değerler güncellendiğinde, tetiklemek istediğiniz işlemi doğrudan da ekleyebilirsiniz (örneğin, bazı eşzamansız olanları). Örneğin, bir listeyi AJAX isteğine göre filtrelemek için bir metin değerini işlemek istiyorsanız, switchMapyöntemi kullanabilirsiniz:
this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
İade edilen gözlemlenebilir öğeyi doğrudan bileşeninizin bir özelliğine bağlayarak daha da ileri gidebilirsiniz:
this.list = this.textValue.valueChanges
.debounceTime(500)
.switchMap(data => this.httpService.getListValues(data))
.subscribe(data => console.log('new list values', data));
ve asyncboruyu kullanarak görüntüleyin :
<ul>
<li *ngFor="#elt of (list | async)">{{elt.name}}</li>
</ul>
Sadece Angular2'de formları farklı şekilde ele almanın yolunu düşünmeniz gerektiğini söylemek için (çok daha güçlü bir yol ;-)).
Umarım sana yardımcı olur, Thierry