【问题标题】:Using angular $asyncValidators with a cache使用带有缓存的角度 $asyncValidators
【发布时间】:2015-12-18 22:35:52
【问题描述】:

我有一个验证指令,用于检查端点的值

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 调用之前检查这些结果?

【问题讨论】:

  • 究竟是什么阻止您缓存结果?执行 AJAX 的是 您的代码

标签: javascript html css angularjs


【解决方案1】:

当然,您可以将结果保存在某种变量中,如下所示:

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

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 2015-07-11
    • 2014-12-17
    • 2016-09-03
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多