2015-02-19 4 views
0

У меня проблема с автозаполнением и угловыми. У меня есть несколько запросов ajax каждый раз, когда я печатаю, и это непригодно. Я пытался использовать тайм-аут без успеха .. это код:

$scope.autoCompleteResults = function(){ 
     $scope.aborter = $q.defer(); 

     $scope.resource = $resource(URL, {}, { 
      getAutocompleteResults: { 
       method: "GET", 
       timeout: $scope.aborter.promise 
      } 
     }); 

     $scope.resource.getAutocompleteResults({}, function (data) { 
      if ($scope.searchTxt.length > 1) { 

       $scope.autocompleteViewResults = data.data; 
       $scope.aborter.resolve(); 

      } else { 
       $scope.autocompleteViewResults = []; 
       $scope.search.aborter.reject(); 
      } 
     }); 
}; 

ответ

1

Вы можете попробовать использовать атрибут ng-model-options для того, чтобы ограничить АНИ призваний.

Просто добавьте ng-model-options="{ debounce: 500 }" на ваш вход, модель будет обновлена ​​через 0,5 секунды после последнего изменения. Если триггер является директивой ng-change, он будет ограничивать количество запросов. Не колеблясь, чтобы использовать, а входные директивы как ng-minlength и ng-maxlength

Кроме того, вы можете использовать логическое значение, чтобы блокировать API призваний, когда запрос уже идет.

Вы могли бы сделать что-то вроде этого.

var Resource = $resource(URL, {},{ getAutocompleteResults: { method: "GET" }}); 

var locked = false; 
function getMoreData() { 

    if(locked) 
     return; 
    locked = true; 

    Resource.autoCompleteResults() 
     .$promise.then(function(data) { 
      $scope.autocompleteViewResults = data; 
      locked = false; 
     }); 

} 

Кроме того, я настоятельно рекомендую вам хранить логику кода на заводах и/или услугах.

+0

есть, чтобы объявить тайм-аут в моем ресурсе? –

+0

да, если вы этого не сделаете, это хорошая практика. – Polochon

+0

Итак, я могу использовать таймаут, как я уже делал раньше, добавить ваш логический код и даже добавить модель-вариант? –

Смежные вопросы