ngChange wird ausgelöst, während sich der Wert ändert (ngChange ähnelt nicht dem klassischen onChange-Ereignis). Wie kann ich das klassische onChange-Ereignis mit anglejs binden, das nur ausgelöst wird, wenn der Inhalt festgeschrieben wird?
Aktuelle Bindung:
<input type="text" ng-model="name" ng-change="update()" />
Antworten:
Dieser Beitrag zeigt ein Beispiel für eine Direktive, die die Modelländerungen an einer Eingabe verzögert, bis das Unschärfeereignis ausgelöst wird.
Hier ist eine Geige, die zeigt, wie ng-change mit der neuen Direktive ng-model-on-blur funktioniert. Beachten Sie, dass dies eine leichte Änderung der ursprünglichen Geige ist .
Wenn Sie die Direktive zu Ihrem Code hinzufügen, ändern Sie Ihre Bindung wie folgt:
Hier ist die Richtlinie:
Hinweis: Wie @wjin in den Kommentaren unten erwähnt, wird diese Funktion direkt in Angular 1.3 (derzeit in der Beta) über unterstützt
ngModelOptions
. Weitere Informationen finden Sie in den Dokumenten .quelle
ng-blur
Direktive: docs.angularjs.org/api/ng.directive:ngBlurng-model-options="{ updateOn: 'default blur' }"
Siehe Dokumentation$sniffer
feststellen, dass er verwendet, um festzustellen, ob der Browser 'input' unterstützt, und wenn nicht, Sie fallen auf "Keydown" zurück. Wenn Sie die obige Anweisung aktualisieren, um 'input' nur dann aufzuheben, wenn$sniffer.hasEvent('input')
true zurückgegeben wird, können Sie diesen Fehler vermeiden und trotzdem in IE8 arbeitenHier geht es um die jüngsten Ergänzungen von AngularJS, die als zukünftige Antwort dienen sollen (auch für eine andere Frage ).
Angular neuere Versionen (jetzt in 1.3 Beta) unterstützt AngularJS nativ diese Option verwenden
ngModelOptions
, wieNgModelOptions-Dokumente
Beispiel:
quelle
Falls jemand anderes für zusätzliche suchen „enter“ keypress Unterstützung, hier ist ein Update für die Geige , bereitgestellt durch gloppy
Code für die Tastendruckbindung:
quelle
Für alle, die mit IE8 zu kämpfen haben (es mag das Aufheben der Bindung ('Eingabe') nicht), habe ich einen Weg gefunden, dies zu umgehen.
Fügen Sie $ sniffer in Ihre Direktive ein und verwenden Sie:
IE8 beruhigt sich, wenn Sie dies tun :)
quelle
Meines Wissens sollten wir ng-change mit der Auswahloption verwenden und im Textfeldfall ng-blur verwenden.
quelle
Wird $ scope. $ Watch nicht verwendet, um die Änderungen der Bereichsvariablen besser widerzuspiegeln?
quelle
quelle
Ich hatte genau das gleiche Problem und das hat bei mir funktioniert. Fügen Sie hinzu
ng-model-update
undng-keyup
und Sie können loslegen! Hier ist die Dokumentationquelle