2015-11-03 2 views
1

Я использую angular-http-auth для перехвата ответа 401, чтобы отобразить диалог входа в систему и когда пользователь авторизован, повторить неудачный запрос.Авторизация перехватчика с Infinity-scroll в AngularJS

Поскольку я использую infinity-scroll Я увеличивая величину смещения, с каждой дополнительной загрузкой:

var upload = function() { 
       dataResource.query($scope.model).then(function (result) { 
        angular.forEach(result.items, function (value) {        
         $scope.items.push(value); 
        });       
       }); 
      } 

$scope.uploadMore = function() {      
         $scope.model.Offset = $scope.model.Offset + 10; 
         upload();            
        }; 
upload(); 

Когда мои загрузки страницы вверх немедленно посылают 2 запроса на загрузку сервера(), вызываются из этой директивы , и uploadMore() на infinity-scroll.

Однако, после входа пользователя в систему, страница не отображает первые 10 записей, вместо этого она отображает 11-20 элементов 2 раза подряд.

Когда я попытался отладить его, я заметил, что когда angular-http-auth повторяет запросы, он использует увеличенное на 10 значение смещения для обоих запросов (аргумент $scope.module).

Функции upload() и uploadMore() работают в 2 раза до angular-http-auth, поэтому я думаю, поэтому перехватчик использует обновленный аргумент для обоих запросов.

Может кто-нибудь, пожалуйста, помогите мне с этой проблемой?

ответ

1

Таким образом, вы можете решить эту проблему, чтобы предотвратить выполнение запроса выполнения до тех пор, пока предыдущий не завершится. Более быстрый способ сделать это:

var pending = false; 
var upload = function() { 
      if(!pending) { 
      pending = true; 
      dataResource.query($scope.model).then(function (result) { 
       pending = false; 
       angular.forEach(result.items, function (value) {        
        $scope.items.push(value); 
       });       
      }); 
      } 
     } 
Смежные вопросы