我有以下指令:
.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毫秒,或者让它在输入模糊时触发验证?
更新
虽然它比我容易:
添加ng-model-options =“{debounce:300}”就可以了.
感谢JB Nizet带领我找到正确的答案
最佳答案 它比我更容易:添加ng-model-options =“{debounce:300}”就可以了.