延迟angularjs中的异步验证器

我有以下指令:

.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}”就可以了.

点赞