Не записывайте неверные значения с помощью 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», последнее действительное число все еще отображается выше. То есть модель всегда имеет допустимое значение, даже если элемент управления не имеет.

Ответы на вопрос(3)

Ваш ответ на вопрос