2017-04-18 39 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循環。