2013-08-19 7 views
7

anglejsでフォームの検証を行うユーザーがサブミットをクリックしたときに、必要なすべてのフィールドを誤ったものとしてマークします。anglejsフォームで強制的にダンプする

私はinput.ng-dirty.ng-invalidを使用して、エラーのあるコントロールのスタイルを設定しています。だから私が欲しいのは、ユーザーがフォームを送信したときに必要なコントロール(またはすべてのコントロール..それは私のために同じになります)にng-dirtyを設定することです。

検証が機能しています。なぜ私が試みていることが間違っているのか理解していますが、正しいとは思えないものを除いて同じ効果を出す方法は他にありませんでした。私がいた試した何

<div ng-app> 
    <form novalidate> 
     <input name="formvalue" type="text" ng-model="formvalue" required /> 
     <input type="submit" /> 
    </form> 
</div> 

http://jsfiddle.net/yq4NG/

答えて

8

のは

デフォルトで
<div ng-app>...</div> 

​​

でそれをラップすることにより、あなたのjsfiddleに必要なフィールドを角度追加してみましょう入力時に検証されます(ダーティー)。入力前にサブミット時にバリデーションを行いたい場合は、サブミット・ボタンで関数を実行して、元のフィールドをチェックしてダーティーすることができます。私は例のやっていることである

http://jsfiddle.net/yq4NG/6/

あなたはおそらく、カスタムフォーマッタとバリデータを使用して、再利用可能なソリューションを構築することができますが、これはオフのソリューションに簡単です。

EDIT:

簡素再びクラスだけ使用:角度が$setPristine()と同等だ$setDirty()方法を提供していないので

http://jsfiddle.net/yq4NG/8/

EDITを[コメントで@XMLilleyによって示唆されているように] $ viewValueを$modelValueの内容で更新するだけで、$dirty状態がトリガーされます。それは何も変わらないが、手動で各$pristineフィールドを入力し、何も変更せずに値を混乱させるユーザをシミュレートする。

+0

あなたのソリューションに感謝します。私はフィドルを救うのを忘れていたので、私はNGアプリを逃していたのです。しかし、それは私が避けようとしていた複雑な解決策の一種です。私が行方不明になっているものはありませんか?私はそれがまれなコーナーケースの使用法だとは思えません。 (コントロールに妥当性検査を示すために同じ値を割り当てても、ちょっと厄介なように思えます) – Fernando

+0

角度の検証が行われ、瞬時に応答します。サーバー側の検証とは異なります。必要なフィールドが検証されます。必要な属性が設定されていて、記入されていない場合、フォームは送信しません。これは、クラス「ng-invalid-required」によって示されます。しかし、フィールドは変更されていないので、汚れていません。 –

+1

@Fernando私は自分のニーズに合った解決策を提案して答えを更新しました。これがあなたが探している解決策でない場合は、私に知らせてください。そうであれば、答えとしてマークしてください。 –