用于表单验证的Angularjs$viewValue.length

用于表单验证的Angularjs$viewValue.length,angularjs,forms,validation,Angularjs,Forms,Validation,我有一个简单的示例,我试图从中添加验证。我将表单中的$viewValue与ng min/mg max的值进行比较,以通知用户是否尝试输入超过最大值和低于允许的最小值的值。问题是,如果使用ng if=“myform.$viewValue.length>maxvalue”,则不会出现错误。但是,当我排除.length()时,错误确实会出现。但是,在本例中,它使用maxvalue number检查$viewValue字符串中的每个整数,这是不需要的。我知道$viewValue.length会给我一个数

我有一个简单的示例,我试图从中添加验证。我将表单中的$viewValue与ng min/mg max的值进行比较,以通知用户是否尝试输入超过最大值和低于允许的最小值的值。问题是,如果使用ng if=“myform.$viewValue.length>maxvalue”,则不会出现错误。但是,当我排除.length()时,错误确实会出现。但是,在本例中,它使用maxvalue number检查$viewValue字符串中的每个整数,这是不需要的。我知道$viewValue.length会给我一个数字而不是字符串,这样我就可以比较一个数字和一个数字,但在这种情况下,错误永远不会出现

我甚至有一个JSFIDLE示例可以工作 但它不在我的应用程序中

这是我的表格:

    <form name="modelParamsForm" novalidate>    
      <div class ="row">
        <div class="form-group col-md-4" ng-repeat="modelParam in 
          modelParams" ng-class="{ 'has-error' : 
          modelParamsFieldForm.value.$invalid }">
              <ng-form name="modelParamsFieldForm">           
                 <label form-group>{{modelParam.label}}</label>                     
                 <input type="number" class="form-control input-sm" 
                 ng-model="modelParam.value" name="value" 
                 ng-min="modelParam.minvalue" ng-max="modelParam.maxvalue" >                    
                 <span ng-show="modelParamsFieldForm.value.$invalid"></span>
                 //MIN-MAX VALIDATOR
                 <div ng-if="modelParamsFieldForm.value.$viewValue.length > 
                 modelParam.maxvalue">Max exceeded:{{modelParam.maxvalue}}
                 </div> 
              </ng-form>
        </div>
     </div>

编辑:在我的JSON模型中,param.maxvalue是一个字符串。我认为问题在于我正在比较myform.$viewValue.length和modelParam.maxvalue,后者是字符串类型。我不知道如何解决这个问题……我必须解析maxvalue吗?

您不需要$viewValue。如果s错误,您的
ng。改为

        <input type="number" class="form-control input-sm col-md-5" ng-model="modelParam.value" name="test" min="modelParam.minvalue"  max="modelParam.maxvalue">

    <span ng-if="modelParam.value > modelParam.maxvalue">Too Many!!</span><br>
    <span ng-if="modelParam.value  < modelParam.minvalue">Too Few!!</span>

太多了
太少了!!

它应该很好用。这是我认为您想要的工作方式。

这里的问题是modelParam.maxvalue是作为字符串而不是整数来自数据库的。因此,当比较
ng if=“myform.$viewValue.length>modelParam.maxvalue”
时,我比较的是一个整数和一个字符串,这显然没有产生预期的结果。解决方案是转到表并将maxvalue设置为整数

或者,可以在控制器中为maxvalue设置第二个变量,该变量解析字符串,如下所示:
$scope.mpMaxValue=parseInt($scope.modelParams.maxvalue)


请参阅这篇文章以了解更详细的讨论:

我刚刚了解到modelParam.maxvalue是string类型。因此,我需要比较表单字段中显示的值,而不是modelParam.value。如果用户键入的值高于最大值,我将尝试警告用户。
        <input type="number" class="form-control input-sm col-md-5" ng-model="modelParam.value" name="test" min="modelParam.minvalue"  max="modelParam.maxvalue">

    <span ng-if="modelParam.value > modelParam.maxvalue">Too Many!!</span><br>
    <span ng-if="modelParam.value  < modelParam.minvalue">Too Few!!</span>