私はAngularJS検証モデルをBootstrapフォームの検証表示と結合しようとしています。BootstrapとAngularJSによるフォーム検証
- ユーザーが空のフォームを読み込んだ場合、フォームにすぐにエラーメッセージが表示されることはありません。ユーザーがフォームとやりとりするまで待つ必要があります。
- ユーザーが必須フィールドに記入していないフォームを送信した場合は、エラーメッセージも表示する必要があります。
- フィールドで入力を開始すると、エラーメッセージがすぐに表示されます。
myForm.$submitted
とmyForm.<fieldName>.$dirty
とmyForm.<fieldName>.$touched
をチェックする必要があります。
しかし、非常に少ないバリエーションで多くの重複コードを作成します。
私はこの問題を解決するための指令を作成しようとしましたが、この複雑さを回避する正しい方法を見つけることができないようです。
HTML:
<div class="form-group required" ng-class="{ 'has-error': myForm.firstname.$invalid && (myForm.firstname.$dirty || myForm.$submitted || myForm.firstname.$touched) }">
<label for="firstname" class="control-label" translate>Profile.FirstName</label>
<input type="text" class="form-control" id="firstname" name="firstname" required ng-model="vm.profile.firstName"/>
<p class="help-block" ng-if="myForm.firstname.$error.required" translate>Forms.Default.Required</p>
</div>
私は全体ng-class
属性を取ると、より簡潔なもので、それを交換したいです。ディレクティブは、そう、これを試してみました移動するための方法のように思えた:
(function(){
'use strict';
angular.module('app')
.directive('hasError', [function(){
return {
restrict: 'A',
scope: {
form: '=bsForm',
control: '=bsControl'
},
link: function(scope, element){
scope.$watch('form', function(){
var isInvalid = scope.control.$invalid && scope.control.$dirty;
element.toggleClass('has-error', isInvalid);
});
}
};
}]);
})();
用途:
<div class="form-group required" has-error bs-form="myForm" bs-control="myForm.firstname">
...
</div>
しかしform
の性質が変化したときにリフレッシュされませんでした。この。
私には何が欠けていますか?