输入更改后,AngularJS清除验证$ error

时间:2015-08-07 11:38:44

标签: angularjs

用小提琴更新了问题。

原文在这里: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/

如果您输入“Tom”#39;输入 - 你永远不会提交表格..

我想从输入的错误堆栈中删除服务器错误。

请帮忙!

1 个答案:

答案 0 :(得分:0)

您似乎只设置了无效,但在更正后设置无效。如果您自己做,如果输入有效,您还必须实施设置$ valid。