Nie zapisuj nieprawidłowych wartości w modelu ng
Naprawdę lubię sposób, w jaki atrybut ng-model wiąże się bezpośrednio z moim modelem, a użytkownicy otrzymują natychmiastową informację zwrotną o swoich zmianach. Dla mojego przypadku użycia, który jest idealny. Nie chcę jednak umieszczać nieprawidłowych wartości w modelu, w którym mogą wrzucić klucz do obliczeń. W jakiś sposób chcę zaktualizować model tylko wtedy, gdy wartość w kontrolce formularza jest poprawna. W przypadku nieprawidłowych wartości zmiana wartości kontrolnej jest w porządku, gdy wartość modelu pozostaje stała.
Jeśli zmienię źródło kąta (1.2rc) implementacja NgModelController $ setViewValue:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value) {
this.$modelValue = value;
...
}
};
Do tego:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value && this.$valid) {
this.$modelValue = value;
...
}
};
Wydaje się, że robi dokładnie to, czego chcę, jednak nie wiem, jak to zrobić we właściwy sposób. Jaki jest właściwy sposób na zmianę tego zachowania? Czy z jakiegoś powodu moje próby skazane są na niepowodzenie?
Aktualizacja: Dodano przykład.
Na przykład spójrz nahttp://jsfiddle.net/FJvgK/1/ HTML:
<div ng-controller="MyCtrl">
{{validNumber}}
<form>
<input
type="number"
ng-model="validNumber"
required
min="10"
max="20"
/>
</form>
</div>
A JS:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.validNumber = 15;
}
Numer wyświetla się poprawnie dla wartości od 10 do 20, ale chcę go, aby nagle wpisać „8” w polu lub usunąć drugą cyfrę, pozostawiając „1”, ostatni prawidłowy numer nadal jest wyświetlany powyżej. Oznacza to, że model zawsze ma poprawną wartość, nawet jeśli formant nie.