我創建了一個角度窗體,顯示從服務器接收到的輸入驗證錯誤。除了一個小問題,我的解決方案很好。 如果我提交沒有值的表單,頁面加載後,我收到來自我的服務器(即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(「改變KEYUP」 ....這一段代碼這就是爲什麼錯誤信息閃爍,當我開始打字也。當我將其更改爲'change'而不是'change keyup'時,錯誤信息會在我開始輸入時永久顯示。
有沒有人知道我如何顯示錯誤信息,即使我沒有輸入值在第一次提交之前輸入?
更新根據評論
這裏是我的形式:
<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="[email protected]" 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);
};
有些問題: 你也可以寫表格嗎? 這是驗證的所有邏輯? 爲什麼$ setValidity被硬編碼爲true? –
我已經將流程的其他部分添加爲我上面的問題的更新@MatteoGabriele – Herm