Не записывайте неверные значения с помощью ng-модели
Мне очень нравится, как атрибут ng-model привязывается непосредственно к моей модели, и пользователи получают мгновенную обратную связь об их изменениях. Для моего случая использования это идеально. Тем не менее, я не хочу, чтобы в модель вводились недопустимые значения, чтобы они могли бросить рывок в вычисления. Я почему-то хочу, чтобы модель обновлялась только в том случае, если значение в элементе управления формы допустимо. Для недопустимых значений можно изменить значение элемента управления, пока значение модели остается фиксированным.
Если я изменю источник угловой (1.2rc) реализации $ setViewValue в NgModelController:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value) {
this.$modelValue = value;
...
}
};
К этому:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value && this.$valid) {
this.$modelValue = value;
...
}
};
Кажется, он делает именно то, что я хочу, однако я не знаю, как это сделать правильно. Как правильно изменить это поведение? Или мои попытки по какой-то причине обречены на провал?
Обновление: добавлен пример.
Например, посмотрите наhttp://jsfiddle.net/FJvgK/1/ HTML:
<div ng-controller="MyCtrl">
{{validNumber}}
<form>
<input
type="number"
ng-model="validNumber"
required
min="10"
max="20"
/>
</form>
</div>
И JS:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.validNumber = 15;
}
Число отображается правильно для значений от 10 до 20, но я хочу, чтобы, если вы внезапно набрали «8» в поле или удалили вторую цифру, оставив «1», последнее действительное число все еще отображается выше. То есть модель всегда имеет допустимое значение, даже если элемент управления не имеет.