2015-07-30 4 views
0

У меня есть угловая проверка и проверка на стороне сервера (например, имя пользователя принята). Я связываю ошибки сервера для формирования элементов.Угловые ошибки JJ перед проверкой

$scope.registerFormSubmit = function() 
{ 
    if (isEmpty($scope.registerForm.$error)) 
    { 
     $http({ 
      url: '/profile/register', 
      method: 'POST', 
      dataType: 'json', 
      data: toArray($scope.form), 
     }).error(function(response){ 
      if (false == is(response.formErrors)) return; 
      for (var k in $scope.registerForm) 
      { 
       if (!is(response.formErrors[k])) 
       { 
        try 
        { 
         $scope.registerForm[k].$error = {}; 
        }catch(e){ 

        } 

        continue; 
       } 
       else 
       { 
        $scope.registerForm[k].$error[response.formErrors[k]] = 1; 
       } 
      } 

     }); 
    } 
} 

Проблема заключается в том, что пользовательские изменения модели (например, имя пользователя) с сервера все еще существуют после отправки щелчка. Таким образом, ajax не может быть отправлен, потому что условие

isEmpty($scope.registerForm.$error) 

Всегда ложно, поскольку форма имеет ошибки.

ответ

0

Там довольно подробное обсуждение использования Угловая с серверной стороны проверки здесь: AngularJS: integrating with server-side validation

Зажигалка вес раствора я использовал:

  • Основные ошибки, так что вы знаете, что они сервер ошибка. Для того, чтобы сохранить знания о конкретной ошибке, вы могли бы сделать что-то вроде этого, а не в текущем обработчике ошибок:

$scope.registerForm[k].$error.server = 'Error-specific string. Could also be an object';

  • Четких ошибки сервера на изменении входного сигнала. Вот директива образец, чтобы сделать это на KeyDown:

angular.module('myApp') 
 
    .directive('serverError', function() { 
 
    return { 
 
     restrict: 'A', 
 
     require: 'ngModel', 
 
     link: function(scope, element, attrs, ngModel) { 
 
     element.on('keydown', function() { 
 
      return ngModel.$setValidity('server', true); 
 
     }); 
 
     } 
 
    }; 
 
    });
<input type="text" ng-model="username" placeholder="coolguy" server-error />

  • Тогда вы можете просто применить server-error директиву всех элементов формы.