2017-05-11 2 views
0

Ich versuche, dieses Plunk-Beispiel für meine Anwendung zu implementieren http://plnkr.co/edit/p6Dt3yvTq40Vn56AKiqC?p=preview. Hier ist die Client-Seite:Angular Infinite Scrolling

$scope.fetch = function($select, $event) { 
    if ($scope.loading) { 
     return; 
    } 
    // no event means first load! 
    if (!$event) { 
     $scope.page = 1; 
     $scope.items = []; 
    } else { 
     //$event.stopPropagation(); 
     //$event.preventDefault(); 
     $scope.page += 1; 
    } 

    $scope.loading = true; 
    $http({ 
     method: 'GET', 
     url: 'http://localhost/search/books', 
     params: { 
     q: $select.search, 
     page: $scope.page 
     } 
    }).then(function(books) { 
     $scope.items = $scope.items.concat(books.data.items); 
    })['finally'](function() { 
     $scope.loading = false; 
    }); 
    }; 

Aber sobald ich das Ende meiner Ergebnisse zu erreichen, ist es eine Schleife und das Scrollen hält meine Datenbank zu holen und zurück ein leeres Array.

In meinem Backend ich sende einen Wert, wenn ich das Limit erreiche, aber wie kann ich das Scrollen auf der Client-Seite zu stoppen, sobald ich das Limit erreicht?

dank

Antwort

1
$scope.search = 'not specified'; 
$scope.limit = false; 

$scope.fetch = function($select, $event) { 
    if ($scope.loading) { 
     return; 
    } 
    // no event means first load! 
    if (!$event) { 
     $scope.page = 1; 
     $scope.items = []; 
    } else { 
     //$event.stopPropagation(); 
     //$event.preventDefault(); 
     $scope.page += 1; 
    } 

    if($scope.search != $select.search || !$scope.limit) 
    { 
     $scope.search = $select.search; 
     $scope.loading = true; 
     $http({ 
     method: 'GET', 
     url: 'https://api.github.com/search/repositories', 
     params: { 
      q: $select.search, 
      page: $scope.page 
     } 
     }).then(function(resp) { 
     $scope.items = $scope.items.concat(resp.data.items); 
     $scope.limit = resp.data.limitReached; 
     })['finally'](function() { 
     $scope.loading = false; 
     }); 
    } 
}; 
+0

Ich habe einen boolean Wert statt: $ scope.limit = resp.data.items.limitReached, also wenn das Limit erreicht ist, ich die http Anruf nicht, aber mein Wert noch wahr, wenn ich eingeben ein anderer Wert in der Textbox. Es gibt eine Möglichkeit, den Wert auf "false" zurückzusetzen, sobald ich einen neuen Wert eingegeben habe. – user708683

+0

Verwirrt. resp.data.items sollte ein Array sein, oder? Wie kann Ihr limitReached darauf zugreifen? Wenn Sie sie nur zusammen zu einem neuen Objekt machen {limitReached: true/false, items: []} – wannadream

+0

Nicht, es ist kein Array, es ist ein Boolescher Wert. query.items = Array und query.limitReached = true/false, die ich beide von meinem Backend sende. Und sorry, ich meinte $ scope.limit = resp.data.limitReached und nicht $ scope.limit = resp.data.items.limitReached, aber Sie haben Recht, ich werde es mit meinen Array-Elemente auf der Client-Seite zusammenführen und Sie wissen lassen. – user708683

Verwandte Themen