2016-03-24 4 views
0

Ich habe ein Formular, das Daten jedes Mal speichern muss, wenn etwas geändert wird. Ich habe ng-change für alle Formularelemente verwendet, um eine Formularüberprüfung und eine Sicherung auszulösen. Im Fall von Optionsfeldern wird jedoch ng-change ausgelöst, bevor der tatsächliche Wert aktualisiert wird, was beim ersten Versuch zu einem ungültigen Formular und bei allen nachfolgenden Versuchen zu einem veralteten Formular führt.ng-change ausgelöst, bevor Wert aktualisiert wird

Ich habe eine JSFiddle eingerichtet, um dies zu veranschaulichen. Die Konsole gibt aus, ob das Formular gültig ist oder nicht. Gleiches gilt, wenn ich den Wert $scope.form.test.$modelValue ausdrucken würde.

Ist meine Logik fehlerhaft, ist dies ein gültiger Fehler, oder funktioniert es wie erwartet? Was kann ich im letzten Fall tun, um immer den tatsächlichen Wert zu erhalten?

Antwort

1

Sie benötigen eine Verzögerung den aktualisierten Wert der $scope.form zu bekommen, so ist es möglich, durch die Verwendung $timeout

http://jsfiddle.net/loen22/w7dpx57f/

$scope.checkRadios = function(){ 
    $timeout(function() { 
    console.log($scope.form.$valid); 
    }); 
} 
+0

ich mit Timeouts in Fällen wie dies in der Regel zu erreichen, vermeiden, weil sie scheinen, hacky, aber leider sehe ich keine Alternative, also werde ich weitermachen und dies umsetzen. Vielen Dank. –

+1

$ queue terminiert den Callback für den nächsten Digest-Zyklus, so dass im aktuellen Digest-Zyklus das '$ scope.form'-Update durchgeführt wird, wodurch $ timeout weniger hacky wird :) –

Verwandte Themen