Zdarzenie zmiany jest wywoływane dopiero po zmianie fokusa wejścia. Jak mogę to zrobić, aby zdarzenie było uruchamiane przy każdym naciśnięciu klawisza?
<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}
Drugie wiązanie zmienia się przy każdym naciśnięciu klawisza btw.
Użyj
ngModelChange
, dzieląc[(x)]
składnię na dwie części, tj. Wiązanie danych właściwości i wiązanie zdarzeń:Działa również z klawiszem Backspace.
źródło
Wydarzenie (keyup) jest najlepszym wyborem.
Zobaczmy, dlaczego:
Tak więc (keyup) jest najbezpieczniejszy, ponieważ ...
źródło
keyup
jest z pewnością jedną z najbezpieczniejszych opcji, jednakinput
wydarzenie jest o krok do przodukeyup
.keyup
w przeciwieństwie doinput
nie działa, jeśli wartość pola tekstowego jest zmieniana w jakikolwiek inny sposób, np. wiązanie.(change)
obok obejścia, a następnie niektóre. Przyjęta odpowiedź jest do kitu!(ngModelChange)
?źródło
keydown
lubkeyup
zamiast tego. Niektóre klucze po prostu się nie uruchamiająkeypress
. Zobacz także stackoverflow.com/questions/4843472/…Innym sposobem radzenia sobie z takimi przypadkami jest użycie formControl i zasubskrybowanie go
valueChanges
podczas inicjowania komponentu, co pozwoli ci używać operatorów rxjs do zaawansowanych wymagań, takich jak wykonywanie żądań HTTP, stosowanie debounce do momentu, aż użytkownik skończy pisać zdanie, przyjmie ostatnią wartość i pomiń poprzednie ...źródło
FormGroup
Sekretnym zdarzeniem, które utrzymuje synchronizację kątową ngModel, jest wejście wywołania zdarzenia . Dlatego najlepszą odpowiedzią na twoje pytanie powinno być:
źródło
archiwum .ts
źródło
To czego szukasz
Następnie rób co chcesz z danymi, uzyskując dostęp do powiązania
this.mymodel
w pliku .ts.źródło
W moim przypadku rozwiązaniem jest:
źródło
W przypadku formularzy reaktywnych możesz subskrybować zmiany wprowadzone we wszystkich polach lub tylko w określonym polu.
Pobierz wszystkie zmiany z FormGroup:
Uzyskaj zmianę określonego pola:
źródło
Używam keyup na polu liczbowym, ale dzisiaj zauważyłem w chromie, że wejście ma przyciski góra / dół do zwiększania / zmniejszania wartości, które nie są rozpoznawane przez keyup.
Moim rozwiązaniem jest użycie klucza i zmiana razem:
Wstępne testy wskazują, że to działa poprawnie, prześlemy je ponownie, jeśli zostaną wykryte błędy po dalszych testach.
źródło