不要使用ng-model记录无效值

tra*_*att 8 angularjs angularjs-directive

我真的很喜欢ng-model属性如何直接绑定到我的模型,用户可以获得有关其更改的即时反馈.对于我的用例来说,这是完美的.但是,我不希望将无效值放入模型中,他们可以在计算中使用扳手.我不知道如果表单控件中的值有效,我只想更新模型.对于无效值,当模型值保持固定时,控制值可以更改.

如果我改变了角度(1.2rc)NgModelController的$ setViewValue实现的来源:

this.$setViewValue = function(value) {
...
  if (this.$modelValue !== value) {
    this.$modelValue = value;
    ...
  }
};
Run Code Online (Sandbox Code Playgroud)

对此:

this.$setViewValue = function(value) {
...
  if (this.$modelValue !== value && this.$valid) {
    this.$modelValue = value;
    ...
  }
};
Run Code Online (Sandbox Code Playgroud)

它似乎正是我想要的,但我不知道如何以适当的方式做到这一点.改变这种行为的正确方法是什么?或者我的尝试注定会因某种原因失败?

更新:添加了示例.

例如,查看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>
Run Code Online (Sandbox Code Playgroud)

和JS:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.validNumber = 15;
}
Run Code Online (Sandbox Code Playgroud)

数字在10到20之间正确显示,但是我希望如果您突然在框中键入"8",或者删除第二个数字而保留"1",则最后一个有效数字仍显示在上面.也就是说,即使控件没有,模型也始终具有有效值.

Cha*_*ani 7

我相信AnugularJS验证器的默认行为是,如果传递的值无效,则不更新模型.如果您查看开发人员指南并浏览Custom Validation这些示例,还会显示模型未更新或已清除UI中提供的无效值