私はangularアプリを作成しています。このアプリにはいくつかのフォームが設定されています。送信前に入力が必要なフィールドがいくつかあります。
<input type="text" class="form-control" placeholder="Test" ng-model="data.test" required>
ただし、アプリを起動すると、送信ボタンがクリックされる前、またはユーザーがフィールドに何かを入力する前でも、フィールドは「無効」として表示され、クラスは「ng-invalid」および「ng-invalid-required」として表示されます。
それらの2つのクラスがすぐに追加されるのではなく、ユーザーがフォームを送信した後、または対応するフィールドに何か間違ったことを入力した場合に、どうすれば確認できますか?
入力は空であるため、インスタンス化されると無効になるため、Angularは_ng-invalid
_クラスを正しく追加します。
あなたが試すかもしれないCSSルール:
_input.ng-dirty.ng-invalid {
color: red
}
_
これは基本的に、ページが読み込まれ、$scope.formName.setPristine(true)
によって初期状態にリセットされず、何かがまだ入力されておらず、テキストがred
。
Angularフォームのその他の便利なクラス( 将来の参照のための入力 を参照)
_ng-valid-maxlength
_-_ng-maxlength
_が渡されるとき
_ng-valid-minlength
_-_ng-minlength
_が合格したとき
_ng-valid-pattern
_-_ng-pattern
_が合格したとき
_ng-dirty
_-フォームがロードされてからフォームに何かが入力されたとき
_ng-pristine
_-ロードされてからフォーム入力に何も挿入されていない場合(またはフォームのsetPristine(true)
を介してリセットされた場合)
_ng-invalid
_-検証が失敗したとき(required
、minlength
、カスタムのものなど)
同様に、これらのすべてのパターンと作成されたカスタムパターンには_ng-invalid-<name>
_もあります。
この投稿のおかげで、このスタイルを使用して、bootstrapで必要なフィールドが表示されたときにユーザーが既に何も入力する機会がなかったときに自動的に表示される赤い境界線を削除します。
input.ng-pristine.ng-invalid {
-webkit-box-shadow: none;
-ms-box-shadow: none;
box-shadow:none;
}
フィールドは空であるため無効であるため、ng-invalid
およびng-invalid-required
クラスは適切に追加されます。
クラスng-pristine
を使用して、フィールドが既に使用されているかどうかをチェックできます。
フォームが送信されたとき、またはフィールドが無効なときに、検証用のクラスを動的に追加してみてください。フォーム名を使用して、「name」属性を入力に追加します。ブートストラップの例:
<div class="form-group" ng-class="{'has-error': myForm.$submitted && (myForm.username.$invalid && !myForm.username.$pristine)}">
<label class="col-sm-2 control-label" for="username">Username*</label>
<div class="col-sm-10 col-md-9">
<input ng-model="data.username" id="username" name="username" type="text" class="form-control input-md" required>
</div>
</div>
フォームにng-submit = ""属性があることも重要です。
<form name="myForm" ng-submit="checkSubmit()" novalidate>
<!-- input fields here -->
....
<button type="submit">Submit</button>
</form>
検証用のオプション関数をフォームに追加することもできます。
//within your controller (some extras...)
$scope.checkSubmit = function () {
if ($scope.myForm.$valid) {
alert('All good...'); //next step!
}
else {
alert('Not all fields valid! Do something...');
}
}
これで、アプリをロードすると、フォームが送信されたとき、またはフィールドがタッチされたときにのみ、クラス「has-error」が追加されます。の代わりに:
!myForm.username。$ pristine
以下も使用できます。
myForm.username。$ dirty