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



用小提琴更新问题。

原文在此: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>

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/

如果你在输入中输入'Tom',你将永远不会再提交表单了。

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

请帮忙!

似乎你只设置无效,但不设置有效后,它被纠正。如果你自己做,你也必须实现设置$valid,如果输入是有效的

最新更新