質問が古いことは知っていますが、ディレクティブが必要ないことはわかっていますが、「Angular」の方法である場合はディレクティブの使用を検討できます...ここに私のAngular-Validationがあります。私は Github でプロジェクトを作成しましたが、利用可能なものと比較して非常に優れていると思います...私は優れた Laravel PHP フレームワークに基づいて、Angular で利用できるようにしました...非常にシンプルで、2 つ必要ですlinesコードの 1 行、入力用の1 行、エラー表示用の 1 行、それだけです... 決して多くも少なくもありません!!! 十分に述べたので、いくつか例を挙げましょう。
<!-- example 1 -->
<label for="input1">Email</label>
<input type="text" validation="email|min_len:3|max_len:25|required" ng-model="form1.input1" name="input1" />
<!-- example 2 -->
<label for="input2">Alphanumeric + Exact(3) + required</label>
<input type="text" validation="alpha|exact_len:3|required" ng-model="form1.input2" name="input2" />
したがって、単純なディレクティブで必要な検証ルール (すでに 25 種類以上のバリデーター) をいくらでも定義できvalidation="min_len:2|max_len:10|required|integer"
、エラー メッセージは常に次のディレクティブに表示され<span>
ます。入力用の 1 行のコード、エラー表示用の 1 行のコード、それよりも簡単にすることはできません...ああ、追加したい場合は、カスタム正規表現もサポートします。もう 1 つのボーナスとして、必要なトリガー イベントをサポートします。最も一般的なのは、おそらくonblur
とonkeyup
です。ああ、JSON 外部ファイルを介して複数のローカライズ言語もサポートしています。私は、1 つの非常にシンプルなディレクティブに、考えられるすべての機能を実際に追加しました。
1 つの入力に対して 10 行のコードを含むクラスター化されたフォームはもう必要ありません (申し訳ありませんが、常に少し極端であることがわかりました)。必要なのは 2 行だけで、入力に 5 つのバリデーターがある場合でも、これ以上は必要ありません。そして、フォームが無効にならないことを心配する必要はありません。私もそれを処理しました。すべてが適切な「Angular」の方法で処理されました。
私の Github プロジェクトAngular-Validationを見てみましょう ...きっと気に入っていただけると思います =)
更新
もう 1 つのキャンディー ボーナスです! ユーザー エクスペリエンスをさらにスムーズにするために、タイマーの検証を追加しました。コンセプトはシンプルです。ユーザーが入力している間は気にせず、ユーザーが一時停止したり入力を変更したりしたかどうかを検証します (onBlur)... 気に入りました!!!
好みに応じてタイマーをカスタマイズすることもできます。ディレクティブ内でデフォルトを 1 秒に設定することにしましたが、カスタマイズしたい場合は、たとえばtyping-limit="5000"
5 秒にするために呼び出すことができます。タイムアウト。完全な例:
<input type="text" ng-model="form1.input1" typing-limit="5000" validation="integer|required" name="input1" />
<span class="validation text-danger"></span>
更新 #2
入力一致確認の検証 (例: パスワード確認) も追加されました。サンプル コードは次のとおりです。
<!-- input match confirmation, as for example: password confirmation -->
<label for="input4">Password</label>
<input type="password" name="input4" ng-model="form1.input4" validation="alpha|min_len:4|required" />
<label for="input4c">Password Confirmation</label>
<input type="password" name="input4c" ng-model="form1.input4c" validation="match:form1.input4,Password|required" />
更新 #3
ディレクティブをリファクタリングして<span>
、エラーを表示する必要がないようにしました。ディレクティブはエラーを単独で処理するようになりました。コードの変更が一番上に反映されていることを確認してください。
DEMO Plunker
にライブデモを追加しました