Javascript 使用带缓存的angular$AsyncValidator
我有一个验证指令,它根据端点检查一个值Javascript 使用带缓存的angular$AsyncValidator,javascript,html,css,angularjs,Javascript,Html,Css,Angularjs,我有一个验证指令,它根据端点检查一个值 App.directive('validate', function(fooService, $q) { return { restrict: "A", require: "ngModel", link: function(scope, elem, attrs, ngModel) { ngModel.$asyncValidators.async = function(modelValue, viewValue) {
App.directive('validate', function(fooService, $q) {
return {
restrict: "A",
require: "ngModel",
link: function(scope, elem, attrs, ngModel) {
ngModel.$asyncValidators.async = function(modelValue, viewValue) {
return fooService.get(viewValue)
.then(function(resp) {
if (!resp.data.success) {
return $q.reject('Not found');
} else {
return true;
}
});
};
}
};
});
有没有一种方法可以缓存该调用以前的结果,并在执行AJAX调用之前对照这些结果进行检查?当然,可以将结果保存在某种变量中,如下所示:
App.directive('validate', function(fooService, $q) {
var previousResults = {};
return {
restrict: "A",
require: "ngModel",
link: link
};
function link(scope, elem, attrs, ngModel) {
ngModel.$asyncValidators.async = validateAsync;
function validateAsync(modelValue, viewValue) {
var previousResult = previousResults[viewValue];
if(angular.isDefined(previousResult){
var method = (previousResult === true) ? 'resolve' : 'reject';
return $q[method](previousResult);
}else{
return fooService.get(viewValue)
.then(onSuccess)
.catch(onError);
}
function onSuccess(resp){
return previousResults[viewValue] = !!resp.data.success;
}
function onError(){
return previousResults[viewValue] = false;
}
}
}
});
请注意,在AngularJS<1.4中,$q.resolve被称为$q.when。到底是什么阻止您缓存结果?是您的代码完成了AJAX