Das Änderungsereignis wird erst aufgerufen, nachdem sich der Fokus der Eingabe geändert hat. Wie kann ich dafür sorgen, dass das Ereignis bei jedem Tastendruck ausgelöst wird?
<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}
Die zweite Bindung ändert sich übrigens bei jedem Tastendruck.
Verwenden Sie diese Option,
ngModelChange
indem Sie die[(x)]
Syntax in zwei Teile aufteilen, z. B. Eigenschaftsdatenbindung und Ereignisbindung:Es funktioniert auch für die Rücktaste.
quelle
Das (Keyup-) Event ist die beste Wahl.
Mal sehen warum:
Also (keyup) ist am sichersten, weil es ...
quelle
keyup
ist sicher eine der sichersten Optionen, aber dieinput
Veranstaltung ist einen Schritt vorauskeyup
.keyup
Im Gegensatz dazuinput
funktioniert es nicht, wenn der Wert des Textfelds auf andere Weise geändert wird, z. B. durch Binden.(change)
neben einer Problemumgehung und einigen anderen die einzige ist, die tatsächlich angesprochen wird. Die akzeptierte Antwort ist total beschissen!(ngModelChange)
?quelle
keydown
oderkeyup
stattdessen verwenden. Einige Schlüssel feuern einfach nicht ankeypress
. Siehe auch stackoverflow.com/questions/4843472/…Eine andere Möglichkeit, solche Fälle zu behandeln, besteht darin, formControl zu verwenden und es zu abonnieren,
valueChanges
wenn Ihre Komponente initialisiert wird. Auf diese Weise können Sie rxjs- Operatoren für erweiterte Anforderungen wie das Ausführen von http-Anforderungen verwenden, eine Entprellung anwenden, bis der Benutzer mit dem Schreiben eines Satzes fertig ist, und den letzten Wert annehmen und vorher weglassen, ...quelle
FormGroup
Das geheime Ereignis, das ngModel im Winkel synchron hält, ist die Eingabe des Ereignisaufrufs . Daher sollte die beste Antwort auf Ihre Frage sein:
quelle
Archiv .ts
quelle
Was Sie suchen, ist
Machen Sie dann mit den Daten, was Sie wollen, indem Sie auf die Bindung
this.mymodel
in Ihrer .ts-Datei zugreifen .quelle
In meinem Fall lautet die Lösung:
quelle
Bei reaktiven Formularen können Sie die Änderungen abonnieren, die an allen Feldern oder nur an einem bestimmten Feld vorgenommen wurden.
Holen Sie sich alle Änderungen einer FormGroup:
Holen Sie sich die Änderung eines bestimmten Feldes:
quelle
Ich habe Keyup für ein Zahlenfeld verwendet, aber heute habe ich festgestellt, dass der Eingang in Chrome Auf- / Ab-Tasten hat, um den Wert zu erhöhen / zu verringern, der von Keyup nicht erkannt wird.
Meine Lösung besteht darin, Keyup zu verwenden und gemeinsam zu ändern:
Erste Tests zeigen, dass dies einwandfrei funktioniert. Wenn nach weiteren Tests Fehler gefunden werden, werden diese zurückgesendet.
quelle