2017-10-03 17 views
7

próbuję wdrożyć formularz automatyczny zapis danych w ruchu obrotowym 4. Powinno to działać tak:
kątowe 4 forma zaplanowane autozapis

  • użytkownik zmieni niektóre dane w formularzu -> trochę zaoszczędzić prośbę do DB jest wywoływany . Załóżmy, że uruchomiono tutaj timer na 2 sekundy.
  • Podczas 2s od poprzedniego żądania zapisu wszystkie zmiany nie wywołają żadnych żądań (w celu zmniejszenia obciążenia bazy danych), ale uruchomią inne żądanie zapisu, a następnie upłynie czas 2s.
  • Jeśli w danym momencie nie uruchomiono żadnego zegara, żądanie zapisu powinno zostać natychmiast wywołane.

Przypuszczam, że Observable, Subject i Scheduler z RxJS pomoże mi, ale jestem zupełnie nowe do niego. Czy możesz zaproponować najlepsze podejście do osiągnięcia powyższej funkcjonalności?

Odpowiedz

4

Można po prostu zapisać się do valueChanges property on FormGroup object powiązanej z operatorem auditTime:

this.form.valueChanges.auditTime(2000).subscribe(formData => /* save to DB */) 

Może także rzucić okiem na throttleTime i debounceTime operatorów.

+0

Dziękujemy! Operator 'auditTime' jest dokładnie tym, czego potrzebowałem! Takie proste i eleganckie rozwiązanie. – aleksei

+0

Powiązana odpowiedź: https://stackoverflow.com/questions/46094431/how-to-implement-auto-save-a-reactive-form-in-angular--4 – Hauke