サーバーから受け取った入力検証エラーを表示する角度のあるフォームを作成しました。私のソリューションは、1 つの小さな問題を除いて正常に機能します。値のないフォームを送信すると、ページが読み込まれた後、サーバーから正しい応答、つまり 422 が返されますが、検証エラーは表示されません。入力に値を入力し始めると、検証エラーが点滅して消えます。
私のディレクティブと関係があることはほぼ確実ですが、修正方法はわかりません。これは私の現在のディレクティブ コードです:
var appServices = angular.module('webFrontendApp.directives', []);
appServices.directive('serverError', function(){
return {
restrict: 'A',
require: '?ngModel',
link: function(scope,element,attrs,ctrl){
element.on('change keyup', function(){
scope.$apply(function(){
ctrl.$setValidity('server', true);
});
});
}
};
});
問題は、このコードの element.on('change keyup'.... セクションにあると思います。そのため、入力を開始するとエラーメッセージが点滅します。また、これを「change keyup」ではなく「change」に変更すると、 、入力を開始すると、エラーメッセージが永続的に表示されます。
初めて送信する前に入力に値を入力しなかった場合でも、エラーメッセージを表示する方法を知っている人はいますか?
コメントごとに更新
ここに私のフォームがあります:
<form ng-submit="create(memberData)" name="form" novalidate>
<div class = "row form-group" ng-class = "{ 'has-error' : form.email.$dirty && form.email.$invalid }">
<input type="text" ng-model="memberData.email" placeholder="janedoe@mail.com" name="email" class="col-xs-12 form-control" server-error>
<span class="errors" ng-show="form.email.$dirty && form.email.$invalid">
<span class="glyphicon glyphicon-remove form-control-feedback"></span>
<span ng-show="form.email.$error.server">{{errors.email}}</span>
</span>
</div>
<div class="row">
<button type="submit" class="btn btn-danger col-xs-12">Join Private Beta</button>
</div>
</form>
そして私のコントローラー:
$scope.memberData = {};
$scope.create = function() {
var error, success;
$scope.errors = {};
success = function() {
$scope.memberData = {};
};
error = function(result) {
angular.forEach(result.data.errors, function(errors, field) {
$scope.form[field].$setValidity('server', false);
$scope.errors[field] = errors.join(', ');
});
};
BetaMember.save({ beta_member: { email: $scope.memberData.email || "" }}).$promise.then(success, error);
};