編集:以下にngMessages(> = 1.3.X)に関する情報を追加しました。
標準フォーム検証メッセージ(1.0.X以降)
これは、Googleの「AngularForm Validation」の場合の上位の結果の1つであるため、現在、そこから入ってくる人のために、これに別の回答を追加したいと思います。
FormController。$setValidityにメソッドがありますが、これはパブリックAPIのようには見えないため、使用しません。
それは「公開」であり、心配する必要はありません。これを使って。それが目的です。使用することを意図していなかった場合、Angularの開発者はクロージャーでそれを民営化したでしょう。
カスタム検証を行うには、他の回答が提案するようにAngular-UIを使用したくない場合は、独自の検証ディレクティブをロールするだけです。
app.directive('blacklist', function (){
return {
require: 'ngModel',
link: function(scope, elem, attr, ngModel) {
var blacklist = attr.blacklist.split(',');
//For DOM -> model validation
ngModel.$parsers.unshift(function(value) {
var valid = blacklist.indexOf(value) === -1;
ngModel.$setValidity('blacklist', valid);
return valid ? value : undefined;
});
//For model -> DOM validation
ngModel.$formatters.unshift(function(value) {
ngModel.$setValidity('blacklist', blacklist.indexOf(value) === -1);
return value;
});
}
};
});
そして、ここにいくつかの使用例があります:
<form name="myForm" ng-submit="doSomething()">
<input type="text" name="fruitName" ng-model="data.fruitName" blacklist="coconuts,bananas,pears" required/>
<span ng-show="myForm.fruitName.$error.blacklist">
The phrase "{{data.fruitName}}" is blacklisted</span>
<span ng-show="myForm.fruitName.$error.required">required</span>
<button type="submit" ng-disabled="myForm.$invalid">Submit</button>
</form>
注:1.2.Xでは、上記の代わりに使用することをお勧めng-if
しng-show
ます
ここに必須のプランカーリンクがあります
また、私はもう少し詳細に入るこの主題についてのいくつかのブログエントリを書きました:
角度形式の検証
カスタム検証ディレクティブ
編集:1.3.XでngMessagesを使用
ngShowの代わりにngMessagesモジュールを使用して、エラーメッセージを表示できるようになりました。実際には何でも機能します。エラーメッセージである必要はありませんが、基本は次のとおりです。
- 含む
<script src="angular-messages.js"></script>
ngMessages
モジュール宣言での参照:
var app = angular.module('myApp', ['ngMessages']);
適切なマークアップを追加します。
<form name="personForm">
<input type="email" name="email" ng-model="person.email" required/>
<div ng-messages="personForm.email.$error">
<div ng-message="required">required</div>
<div ng-message="email">invalid email</div>
</div>
</form>
上記のマークアップでは、ng-message="personForm.email.$error"
基本的にng-message
子ディレクティブのコンテキストを指定します。次に ng-message="required"
、ng-message="email"
監視するそのコンテキストのプロパティを指定します。最も重要なのは、チェックインする順序も指定していることです。リストで最初に見つかった「真実」のメッセージが優先され、そのメッセージが表示され、他のメッセージは表示されません。
そして、ngMessagesの例のプランカー