AngularJSフォームバリデーション
- 前のページ AngularJS フォーム
- 次のページ AngularJS API
AngularJSは入力データをバリデーションすることができます。
フォームバリデーション
AngularJSはクライアント側のフォームバリデーションを提供します。
AngularJSは、フォームと入力フィールド(input、textarea、select)の状態を監視し、ユーザーに現在の状態を通知することができます。
AngularJSは、それがタッチされたか、変更されたかどうかに関する情報も含んでいます。
標準のHTML5属性を使用して入力をバリデーションを行うことができますし、独自のバリデーション関数を作成することもできます。
クライアント側のバリデーションはユーザーの入力を単独で保護することはできません。サーバー側のバリデーションも必要です。
required
HTML5の属性を使用 required
指定されたフィールドは必須です:
インスタンス
この入力フィールドは必須です:
<form name="myForm"> <input name="myInput" ng-model="myInput" required> </form> <p>入力の有効状態は:</p> <h1>{{myForm.myInput.$valid}}</h1>
HTML5のタイプを使用 email
指定された値はメールアドレスでなければなりません:
インスタンス
この入力フィールドはメールアドレスでなければなりません:
<form name="myForm"> <input name="myInput" ng-model="myInput" type="email"> </form> <p>入力の有効状態は:</p> <h1>{{myForm.myInput.$valid}}</h1>
フォーム状態および入力状態
AngularJS は常にフォームおよび入力フィールドの状態を更新します。
入力フィールドには以下の状態があります:
$untouched
このフィールドはタッチされていません$touched
このフィールドはタッチされています$pristine
このフィールドは変更されていません$dirty
このフィールドは変更されています$invalid
フィールドの内容が無効$valid
フィールドの内容が有効
これらはすべて入力フィールドの属性であり、真または偽の値を取ります。
フォームには以下の状態があります:
$pristine
まだ何も変更されていません$dirty
1つまたは複数のフィールドが変更されています$invalid
フォーム内容が無効$valid
フォーム内容が有効$subscribed
フォームが提出されました
これらはすべてフォームの属性であり、真または偽の値を取ります。
これらの状態を使用してユーザーに意味のあるメッセージを表示できます。例えば、必須項目のフィールドがユーザーにより空けられていた場合、ユーザーに警告を発することができます:
インスタンス
フィールドがタッチされており、空の場合にエラーメッセージを表示します:
<input name="myName" ng-model="myName" required> <span ng-show="myForm.myName.$touched && myForm.myName.$invalid">名前は必須です。</span>
CSS クラス
AngularJS はフォームおよび入力フィールドの状態に応じて CSS クラスを追加します。
以下のクラスが入力フィールドに追加されましたまたは入力フィールドから削除されました:
ng-untouched
このフィールドはタッチされていませんng-touched
このフィールドはタッチされていますng-pristine
このフィールドは変更されていませんng-dirty
このフィールドは変更されていますng-valid
フィールドの内容が有効ng-invalid
フィールドの内容が無効ng-valid-key
各キーを一度ずつ検証します。例えば:ng-valid-required
、複数の必須検証の内容がある場合に非常に役立ちますng-invalid-key
例えば:ng-invalid-required
以下のクラスがフォームに追加されましたまたはフォームから削除されました:
ng-pristine
変更されていないフィールドはありませんng-dirty
1つまたは複数のフィールドが変更されていますng-valid
フォーム内容が有効ng-invalid
フォーム内容が無効ng-valid-key
各キーを一度ずつ検証します。例えば:ng-valid-required
、複数の必須検証の内容がある場合に非常に役立ちますng-invalid-key
例えば:ng-invalid-required
クラスが表す値が false
、それらのクラスは削除されます。
これらのクラスにスタイルを追加し、より良い、より直感的なユーザーインターフェースをアプリケーションに提供してください。
インスタンス
標準の CSS を使用してスタイルを適用します:
<style> input.ng-invalid { background-color: pink; }; input.ng-valid { background-color: lightgreen; }; </style>
フォームのスタイルも設定できます。
インスタンス
未修正の(元の)フォームおよび修正されたフォームにスタイルを適用します:
<style> form.ng-pristine { background-color: lightblue; }; form.ng-dirty { background-color: pink; }; </style>
カスタムバリデーション
独自のバリデーション関数を作成するには、いくつかのスキルが必要です;アプリケーションに新しい指令を追加し、指定されたパラメータを処理する関数を使用して内部のバリデーションを行います。
インスタンス
独自の指令を作成し、カスタムバリデーション関数を含め、 my-directive
それを参照します。
値がアルファベット「e」を含む場合のみ、このフィールドが有効です:
<form name="myForm"> <input name="myInput" ng-model="myInput" required my-directive> </form> <script> var app = angular.module('myApp', []); app.directive('myDirective', function() { return { require: 'ngModel', link: function(scope, element, attr, mCtrl) { function myValidation(value) { if (value.indexOf("e") > -1) { mCtrl.$setValidity('charE', true); } else { mCtrl.$setValidity('charE', false); }; return value; }; mCtrl.$parsers.push(myValidation); }; }; }); </script>Example Explained:
HTMLでは、新しい指令は属性 my-directive
を参照します。
JavaScriptでは、まず以下の名前を参照するために追加します。 myDirective
の新しい指令です。
覚えておいてください、指令を名前付ける際にはキャメルケース形式を使用する必要があります、例えば myDirective
を使用しますが、呼び出す際にはハイフンで区切られた名前を使用する必要があります、例えば my-directive
。
次に、指定する必要があるオブジェクトを返します。 ngModel
、すなわち ngModelController
。
リンク関数を作成します。この関数はいくつかの引数を受け取り、その中で第4引数 mCtrl
は ngModelController
。
次に、関数を指定します。この例では、 myValidation
これは、入力要素の値を引数として受け取ります。
この値がアルファベット「e」を含んでいるかテストし、モデルコントローラーの有効性を設定します。 true
または、 false
。
最後に、mCtrl.$parsers.push(myValidation);
を}} myValidation
関数が他の関数の配列に追加され、これらの関数は値が変更されるたびに実行されます。
バリデーション例
<!DOCTYPE html> <html> <script src="https://cdn.staticfile.net/angular.js/1.6.9/angular.min.js"></script> <body> <h2>バリデーション例</h2> <form ng-app="myApp" ng-controller="validateCtrl" name="myForm" novalidate> <p>ユーザー名:<br> <input type="text" name="user" ng-model="user" required> <span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid"> <span ng-show="myForm.user.$error.required">ユーザー名は必須です。</span> </span> </p> <p>メール:<br> <input type="email" name="email" ng-model="email" required> <span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid"> <span ng-show="myForm.email.$error.required">メールは必須です。</span> <span ng-show="myForm.email.$error.email">無効なメールアドレス。</span> </span> </p> <p> <input type="submit" ng-disabled="myForm.user.$dirty && myForm.user.$invalid || myForm.email.$dirty && myForm.email.$invalid"> </p> </form> <script> var app = angular.module('myApp', []); app.controller('validateCtrl', function($scope) {}} $scope.user = 'Bill Gates'; $scope.email = 'bill.gates@gmail.com'; }); </script> </body> </html>
HTML フォーム属性 novalidate デフォルトのブラウザバリデーションを無効にするために使用されます。
例解:
AngularJS インストラクション ng-model
入力要素をモデルにバインドします。
モデルオブジェクトには2つの属性があります:user
および email
。
のために ng-show
、ユーザーまたはメールが $dirty
および $invalid
color:redを持つspanが表示されます。
- 前のページ AngularJS フォーム
- 次のページ AngularJS API