我真的很喜欢 ng-model 属性如何直接绑定到我的模型,并且用户可以立即获得有关更改的反馈。对于我的用例来说,这是完美的。但是,我不希望将无效值放入模型中,以便它们可以在计算中使用扳手。我以某种方式希望仅在表单控件中的值有效时才更新模型。对于无效值,控制值改变而模型值保持固定是可以的。
如果我更改 angular (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”,最后一个有效数字仍会显示在上方。也就是说,模型始终具有有效值,即使控件没有。