2017-04-18 40 views
0

正在调用验证程序,并按预期返回true/false。但是,即使验证器返回false,html仍然会按预期显示类“ng-valid”而不是“ng-invalid”,以使ng消息正常工作。当我使用标准的“必需”错误时,没有问题,但任何自定义功能都无法正常工作。

在调试时,我也发现$错误正在更新,但需要更新,但不是更新日期。

我已经创建了具有自定义验证,daysofmonth一个组成部分,看起来像以下:

this.ngModel.$validators.daysofmonth = function(modelValue) { 
     modelValue = modelValue || ''; 
     let pieces = modelValue.split(','); 
     let isValid = true; 

     pieces.forEach(function(piece) { 
      let numberValue = parseInt(piece, 10); 

      if (isNaN(numberValue)) { 
       if (piece.trim() && piece.trim() !== 'L') { 
        isValid = false; 
       } 
      } else if (numberValue < 1 || numberValue > 31) { 
       isValid = false; 
      } 
     }); 

     return isValid; 
    }; 

的HTML看起来像:

<form name="form"> 
    <div> 
     <input name="daysofmonth" ng-model="ctrl.daysOfMonth"> 
    </div> 

    <ng-messages for="form.daysofmonth.$error"> 
     <ng-message when="daysofmonth">Please enter valid days.</ng-message> 
    </ng-messages> 
</form> 

任何帮助,将不胜感激!

回答

0

的isValid始终是真实的......

在foreach方法是异步,所以如果你希望你的isValid变量是最新的,在返回的那一刻,你在回调这么做。但是,您将从回调中返回结果,而不是从函数返回结果,因此,另一种方法是使用标准同步for循环替换forEach循环。