Sergey Kudryashov
Sergey Kudryashov

Reputation: 723

AngularJS clear validation $error after input's changing

Updated question with fiddle.

Original is here: https://stackoverflow.com/questions/31874313/angularjs-clean-remote-validation-error-after-change-input

In my form I have two validations. First is local, second is remote.

So this is my example

<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>

Here is Controller

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/

If you type 'Tom' into input - you will never submit form more..

And I want to delete server errors from input's error stack on it's change.

Please help!

Upvotes: 4

Views: 5894

Answers (1)

tomastrajan
tomastrajan

Reputation: 1726

It seems you only set invalid but don't set valid after it was corrected. IF you are doing yourself you also have to implement setting $valid if the imput is valid.

Upvotes: 0

Related Questions