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

时间:2013-09-07 18:21:48

标签: angularjs angularjs-directive

我非常喜欢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',最后一个有效数字仍显示在上面。也就是说,即使控件没有,模型也始终具有有效值。

3 个答案:

答案 0 :(得分:7)

我认为AnugularJS验证器的默认行为是在传递的值无效时不更新模型。如果您查看developer guide并浏览Custom Validation,这些示例还会显示模型未更新或已在UI中提供的无效值清除

答案 1 :(得分:2)

正如Chandermani所说,这是默认行为,这是一个显示它在行动中的例子:

<form name="myform">
    <input type="text" name="myinput" ng-model="myvalue" ng-minlength="4" required>
</form>

Is the input valid ? {{ myform.myinput.$valid }} <br />
Input's value : {{ myvalue }}

{{myvalue}}在输入中至少输入4个字符之前不会显示任何内容。

最诚挚的问候。

修改

如果您需要默认值,我猜您可以使用计算值将您的值分解为2个值:

   var validNumber = 15;
    $scope.validNumber = function () {
        if ($scope.myform.myNumber.$valid) return $scope.myNumber;
        else return validNumber;
    };

我在这里设置了一个示例:http://jsfiddle.net/7vtew/1/

答案 2 :(得分:2)

这是默认行为,但是,您可以使用ngModelOptions指令

对其进行修改
$table = $wpdb->get_results('SELECT STRING, DATE, STRING02  FROM `CUSTOMERFILE` WHERE `code` = 2 AND `status` = 2 **AND STRING05 = selected option value**');

文档:https://docs.angularjs.org/api/ng/directive/ngModelOptions请参阅&#39;模型更新和验证&#39;

部分