2015-08-07 2 views
3

Обновленный вопрос со скрипкой.

Оригинал находится здесь: https://stackoverflow.com/questions/31874313/angularjs-clean-remote-validation-error-after-change-input

В моей форме у меня есть два валидаций. Сначала локальный, второй - удаленный.

Так что это мой пример

<form ng-controller="MyCtrl" name="Form"> 
<div class="form-group"> 
    <label class="control-label"> 
     First Name 
    </label> 
    <input type="text" class="form-control" name="firstName" ng-model="myModel.firstName" required /> 
    <span class="error" ng-if="Form.firstName.$dirty && Form.firstName.$invalid" ng-repeat="(e, b) in Form.firstName.$error">{{e}}</span> 
</div> 
<input type="submit" ng-click="submit(Form)"> 
</form> 

Вот контроллер

function MyCtrl($scope, $element) { 

    $scope.submit = function (form) { 

     if (form.$invalid) { 
      renderErrors(form); 
      return; 
     } 
     console.log('local validation passed'); 

     // imitation of remote error 
     // send, then data 

     if($scope.myModel.firstName === 'Tom') 
      renderServerErrors({firstName: ['Already in use']}, form); 
     else 
      alert('Success'); 


    } 

    /** 
    * Errors will appear below each wrong input 
    */ 
    var renderErrors = function(form){ 

      var field = null; 
     for (field in form) { 
      if (field[0] != '$') { 

       if (form[field].$pristine) { 
        form[field].$dirty = true; 
       } 
      } 
     } 

    }; 

    /** 
    * Server errors will appear below each wrong input 
    */ 
    var renderServerErrors = function(err, form){ 

     var field = null; 
     _.each(err, function(errors, key) { 
      _.each(errors, function(e) { 

       form[key].$dirty = true; 
       form[key].$setValidity(e, false); 

      }); 
     }); 


    } 
} 

http://jsfiddle.net/uwozaof9/6/

Если вы наберете 'Том' на вход - вы никогда не будете подавать форму более ..

И я хочу удалить ошибки сервера из стека ошибок ввода при его изменении ,

Пожалуйста, помогите!

+0

Ожидается, потому что первое, что вы делаете в функции '$ scope.submit()', - это проверять прошлые ошибки через 'form. $ Invalid', что верно, если хотя бы один элемент управления недействителен. –

+0

Итак, что мне делать? –

ответ

0

Кажется, вы установили недействительный, но не устанавливаете действие после его исправления. ЕСЛИ вы делаете сами, вам также нужно реализовать параметр $ valid, если imput действителен.

Смежные вопросы