2017-04-18 5 views
0

バリデータが呼び出されており、期待どおりにtrue/falseを返しています。しかし、バリデータがfalseを返す場合でも、ng-messagesが正しく動作するように、htmlは "ng-invalid"ではなく "ng-valid"のクラスを期待どおりに表示します。標準の「必須」エラーを使用すると、問題はありませんが、カスタムは動作しません。

デバッグ時に、$ errorが必要ではなく、daysofmonthではないこともわかりました。

私は、次のようなカスタムバリデータを持つコンポーネント、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変数は、あなたがそれを返すの時点で最新のものにしたい場合は、コールバックでそうしなければなりません。しかし、関数からではなくコールバックから結果を返すので、forEachループを標準のforループで置き換えることができます。

関連する問題