我正在尝试创建一个指令,用于验证用户通过异步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中时,我有一个完全奇怪的行为:第一次我关注输入,没有异步调用,当我模糊没有异步调用时,当我回到焦点输入时我有异步要求每个角色..
答案 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' }">