次のように角度を使用してフォーム検証システムをセットアップしようとしています。
フィールドが $invalid && $dirty の両方である場合、エラー クラスが割り当てられます。
これは、個々のフィールドに最適です。以下はフィールドの例です。
<div class="control-group" ng-class="getErrorClasses(schoolSignup.first_name)">
<label class="control-label" for="first_name">First Name</label>
<div class="controls">
<input type="text" class="input-xlarge" id="first_name" name="first_name" required ng-maxlength="30" ng-model="school.first_name">
<span class="help-inline" ng-show="showError(schoolSignup.first_name, 'required')">This field is required</span>
<span class="help-inline" ng-show="showError(schoolSignup.first_name, 'maxlength')">Maximum of 30 character allowed</span>
</div>
</div>
schoolSignup
フォームの名前です。
ng-class="getErrorClasses(schoolSignup.first_name)">
コントローラで次のように定義されています
$scope.getErrorClasses = function(ngModelContoller) {
return {
error: ngModelContoller.$invalid && ngModelContoller.$dirty
};
};
また、エラーのヘルプ項目ng-show="showError(schoolSignup.first_name, 'required')"
は次のように定義されています。
$scope.showError = function(ngModelController, error) {
return ngModelController.$dirty && ngModelController.$error[error];
};
これはすべてうまくいきます。
ただし、ユーザーが送信ボタンをクリックし、必要な個々のフィールドがすべて無効な場合required
、適切なフィールドの横にエラーメッセージを表示するようにします。
これには、このシステムに基づいて、すべての個々のフィールド$dirty
と$error['required']
値をに設定する必要があります。true
can-save
フォームにアクセスできる次のように送信ボタンにディレクティブを設定しました。
<button class="btn btn-primary btn-large" type="submit" can-save="schoolSignup">Register</button>
-
.directive('canSave', function () {
return function (scope, element, attrs) {
var form = scope.$eval(attrs.canSave);
var valid = false;
element.click(function(){
if(!valid)
{
// show errors
return false;
}
return true;
});
scope.$watch(function() {
return form.$dirty && form.$valid;
}, function(value) {
valid = !!value;
});
}
});
エラーを希望どおりに表示することを除いて、これはすべて機能します。
これを達成する方法についてのアイデアをいただければ幸いです。