我有以下指令:
.directive('validateAsync',
['$http', 'API_LOCATION', function($http, API_LOCATION) {
return {
require : 'ngModel',
link : function(scope, element, attrs, ngModel) {
var apiUrl = attrs.validateAsync;
function setAsLoading(bool) {
ngModel.$setValidity('asyncLoading', !bool);
}
function setAsAvailable(bool) {
ngModel.$setValidity('asyncAvailable', bool);
}
ngModel.$parsers.push(function(value) {
if(!value || value.length == 0) return;
setAsLoading(true);
setAsAvailable(false);
$http.get(API_LOCATION + apiUrl, {
params: {
value : value
}
})
.success(function() {
setAsLoading(false);
setAsAvailable(true);
})
.error(function() {
setAsLoading(false);
setAsAvailable(false);
});
return value;
})
}
}
}]);
这就是这样称呼的:
<input ... validate-async="api/endpoint/to/check/validity">
效果很好,实际上太棒了。因为每个keydown都会发出请求。
如何在验证输入之前使指令等待300 ms
,或者在input blur
上激活验证?
更新
虽然比我容易:
添加ng-model-options="{ debounce: 300 }"
就可以了。
感谢JB Nizet
引导我找到正确答案
答案 0 :(得分:2)
这比我更容易:添加ng-model-options =“{debounce:300}”就可以了。