まず第一に、これには日付ピッカーとの実際のリンクがないかどうか、私があなたの問題を理解していれば、フォームの $invalid につながるエラーに従ってさまざまなメッセージを表示しようとしていると思います
その場合、提供したコードは、日付が無効な場合にのみメッセージを表示します(ただし、パターンの部分にコメントしたためです;))
テスト中は非常に怠惰だったので、日付ピッカーは使用しませんでした。日付を手動で入力する必要がありますが、このフィドルを実行しました: http://jsfiddle.net/DotDotDot/ELf5A/2/
どのようなコンテキストで使用しているのか正確にはわからなかったので、さまざまな方法を使用して検証エラー メッセージを表示しました。
HTML部分はシンプルです。フォームがあり、2 つのフィールドが必要です。1 つは日付のパターン チェックがあり、もう 1 つは必須の検証のみです。日付に 2 つのエラー メッセージを追加しました。1 つはフォームに触れていないときに表示され、期待される形式を示し、もう 1 つはパターンが間違っている場合にのみ表示されます。
ボタンをクリックして検証全体を確認し、別のメッセージを表示して、フォームが有効かどうか、有効でない場合は日付のパターンが原因であるかどうかを確認できます。
<div ng-controller='theCtrl'>
<form name='theForm'>
Enter something here : <input type='text' ng-model='someField' name='someField' required /> <br/>
Enter a date here : <input type='text' ng-model='theDate' name='theDate' ng-pattern='datePattern' required />
<span ng-show='theForm.theDate.$error.pattern'>Your date format is invalid, please check it again</span>
<span ng-show='theForm.theDate.$pristine'>Enter a valid date here : DD/MM/YYYY</span>
<br/> <input type='button' ng-click='validation(theForm)' value='Try to validate me!' />
<br /> {{errorMsg}}
</form>
</div>
JS 部分もそれほど複雑ではありません。ボタンをクリックすると、フォームが検証機能に送信され、実際に必要なすべてのチェックが行われます。パターンに対応するものだけを実行しましたが、検証について必要なものはすべてチェックできます
$scope.validation=function(aForm){
//console.log(aForm)
if(aForm.theDate.$error.pattern)
$scope.errorMsg='The pattern you entered isn\'t good enough, try again !'
else{
if(aForm.$invalid)
$scope.errorMsg='Something is invalid, please check all the fields !'
else//valid
{
$scope.errorMsg='Not bad !'
alert("good job !")
//maybe you can also submit this form here ;)
}
}
}
この検証関数は、ng-show/ng-hide のトリガーとしても完全に使用できます。これが、別の関数も追加した理由です。
$scope.whatToDisplay=function(aForm){
if(aForm.$valid)
return 'valid';
if(aForm.theDate.$error.pattern)
return 'date';
if (aForm.$invalid)
return 'notdate';
}
これは、検証中に何が起こっているかに対応する文字列を返します。これは ng-show で処理されます。
<span ng-show='whatToDisplay(theForm)=="date"'>Displayed if the date is wrong</span>
<span ng-show='whatToDisplay(theForm)=="notdate"'>This is displayed if the form is invalid, but not because of the date format</span>
<span ng-show='whatToDisplay(theForm)=="valid"'>Displayed if the form is valid</span>
少し要約すると、4つの異なる方法を使用できます
私のフィドルの validation() 関数に対応する、クリックでトリガーされる検証関数 (送信ボタンに役立ちます)
whatToDisplay() 関数のように、すべての変更を自動的に監視するいくつかの ng-show に関連付けられた関数
コードで行っていたことなど、フォーム属性のみに関連付けられた ng-show
クラスは自動的にフォームに適用されます(説明はしませんでしたが、フィドルで確認できます。パターンが間違っているか、無効な場合のみ境界線が変更されます)
申し訳ありませんが、これを短くするのに苦労しました。コードで遊んでみましょう。その方が理解しやすいです。これが役に立てば幸いです。