2014-12-08 4 views
0
currentPage = 1; 

$scope.loadPages = function() { 

    Array.prototype.pushArray = function() { 
     this.push.apply(this, this.concat.apply([], arguments)); 
    }; 

    if (currentPage < totalPages) { 

     $scope.infiniteScoll = true; 

     $http({ 
      url: "http://someurl.php", 
      method: "GET", 
      params: { 
       "topicId": $stateParams.topicId, 
       "pageNumber": currentPage 
      } 
     }).then(function (response) { 

      $scope.posts.pushArray(response.data); 

      alert('w2'); 

      currentPage = parseInt(response.data[0].currentPage) + 1; 
      totalPages = parseInt(response.data[0].totalPages) + 1; 



     }). 
     finally(function() { 

      $scope.infiniteScoll = false; 

     }); 

    } 
} 

4 시간 동안 디버깅했는데 왜 두 번 실행되는지 아직 알 수 없습니다. loadPages가 내 지시어인데, 그 안에있는 모든 것을 삭제하고 경고 ('f') 만 남기면 한번만 실행됩니다. 아마도 나는 다른 것을 잘못했을 수도 있습니다.

+0

시도처럼


은 매우 느리게 이동하고, 두 번 해고 여부를 확인합니다. 주석으로 => 말하지 않으면, 나는 똑같은 문제가있다. – Rasalom

+1

차단 키워드이므로 경고를 시도 할 수 없습니다. 간단한 console.log()를 사용해보십시오. 간단한 스크롤링 문제 일 수 있습니다. 두 번째 호출을 멈추게 할 함수의 맨 위에 부울과 "if 블록"을 추가하면 트릭을 만들게됩니다. – Polochon

+0

@Rasalom 정말 느리게 스크롤하려고했는데 여전히 문제가 발생했습니다. occour. 나는 내 스크롤 지시문 문제가 아니라고 확신한다. 내 $ scope.loadPages에 경고 만 남겼을 때, 그것은 한 번 실행되었다. –

답변

3

봅니다 나를 위해 문제를 해결 이온 무한 스크롤에 immediate-check="false"주기 다음 코드

currentPage = 1; 

$scope.loadPages = function() { 

    //should be declared out of this function 
    Array.prototype.pushArray = function() { 
     this.push.apply(this, this.concat.apply([], arguments)); 
    }; 

    if(!$scope.infiniteScoll && currentPage < totalPages) { 

     $scope.infiniteScoll = true; 

     $http({ 
      url: "http://someurl.php", 
      method: "GET", 
      params: { 
       "topicId": $stateParams.topicId, 
       "pageNumber": currentPage 
      } 
     }).then(function (response) { 

      $scope.posts.pushArray(response.data); 

      alert('w2'); 

      currentPage = parseInt(response.data[0].currentPage) + 1; 
      totalPages = parseInt(response.data[0].totalPages) + 1; 



     }). 
     finally(function() { 

      $scope.infiniteScoll = false; 

     }); 

    } 
}; 
+0

var가 차단 되었습니까? 블록 된 변수는 어디에서 사용할 수 있습니까? –

+0

"차단 된"변수가 사용되지 않았습니다 (삭제되었습니다). if 문을 봅니다. – Polochon

+0

$ scope.infiniteScoll이 내 로더입니다. ng-show = "infiniteScroll"을 사용합니다. 죄송합니다. –

0

처럼 infiniteScroll 부울을 사용하여 두 번째 호출을 차단합니다. 이

<ion-infinite-scroll 
      immediate-check="false" 
      on-infinite="loadMore()" 
      ng-if="hasMoreData" 
      distance="1%"> 
</ion-infinite-scroll> 
관련 문제