我真的很喜欢ng- model属性如何直接绑定到我的模型,并且用户可以立即获得有关其更改的反馈。对于我的用例来说,这是完美的。但是,我不希望将无效值放入模型中,因为它们可能会在计算中使用扳手。我以某种方式希望仅在表单控件中的值有效时才更新模型。对于无效值,可以在模型值保持固定的同时更改控制值。
如果我更改角度(1.2rc)NgModelController的$ setViewValue实现的来源:
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”,则最后一个有效数字仍会显示在上方。也就是说,即使控件没有,模型始终具有有效值。
我相信如果传递的值无效,则AnugularJS验证程序的默认行为是不更新模型。如果您查看开发人员指南并仔细查看Custom Validation这些示例,则还表明该模型未更新或因UI中提供的无效值而被清除
Custom Validation