关于模糊角度JS的异步验证指令

时间:2016-09-16 14:15:21

标签: javascript angularjs asynchronous angularjs-directive

我正在尝试创建一个指令,用于验证用户通过异步Web请求提供的邮件。它工作正常,但问题是每次用户键入一个字符时都会进行异步调用,我希望异步调用仅在模糊时完成,我该怎么做?

以下是该指令的代码:

angular.module('myModule').directive('usernameValidator', function($http, $q) {
return {
    require: 'ngModel',
    link: function(scope, element, attrs, ngModel) {
        ngModel.$asyncValidators.username = function(modelValue, viewValue) {
            return $http.post('/username-check', {username: viewValue}).then(
                function(response) {
                    if (!response.data.validUsername) {
                        return $q.reject(response.data.errorMessage);
                    }
                    return true;
                }
            );
        };
    }
};
});

我试图把所有东西放在一个集团中

element.bind('blur', function() { ... })

但是当代码在element.bind bloc中时,我有一个完全奇怪的行为:第一次我关注输入,没有异步调用,当我模糊没有异步调用时,当我回到焦点输入时我有异步要求每个角色..

1 个答案:

答案 0 :(得分:2)

尝试添加到HTML ng-model-options="{ updateOn: 'blur' }"中的指令,如https://docs.angularjs.org/api/ng/directive/ngModelOptions#!所示,因此您的指令如下所示:

<input ng-model="your_model"
       username-validator
       ng-model-options="{ updateOn: 'blur' }">