1

Как проверить, нужно ли мне прекратить вызов функции loadMore(), потому что все документы уже загружены из базы данных?Как проверить, загружены ли все документы с помощью Firebase.util pagination

В приведенном ниже примере я использую Ionic, но это то же самое и с ng-infin-scroll в приложениях AngularJS.

Это мой фактический код:

HTML:

... 

    <ion-infinite-scroll 
    ng-if="!noMoreItemsToLoad" 
    on-infinite="loadMore()" 
    distance="5%"> 
    </ion-infinite-scroll> 

</ion-content> 

JS Контроллер:

$scope.loadMore = function(){ 

    console.log('Loading more docs...'); 

    Items.loadMore(); // calling the .next() method inside the Items service 

    if(!Items.hasNext()) { $scope.noMoreItemsToLoad = true; } 

    $scope.$broadcast('scroll.infiniteScrollComplete'); 

} 

JS товары Фабрика:

.factory('Items', function (FIREBASE_URL, $firebaseArray, $firebaseObject) { 

    var itemsRef = new Firebase(FIREBASE_URL + 'items/'); 
    var scrollRef = new Firebase.util.Scroll(itemsRef, 'name'); 

    var self = { 
    getAllItems : function(){ ... }, 

    loadMore: function(){ 
     scrollRef.scroll.next(4); 
    }, 

    hasNext: function(){ 
     if(scrollRef.scroll.hasNext()) { return true; } 
     else { return false; } 
    } 
    } 

    return self; 

} 
+0

См https://github.com/firebase/firebase-util/tree/master/src/Paginate#refscrollhasnext –

+0

Уже пытались использовать the'ref .scroll.hasNext() '. Проблема в том, что он всегда возвращает false, поэтому я не знаю, какое свойство я должен использовать. – fbid

+0

Вы должны использовать 'hasNext()', а фрагмент, который вы разместили, - нет. Если 'hasNext()' всегда возвращает false, либо есть ошибка, либо вы используете это неправильно. –

ответ

0

Я была такая же проблема, и я думаю, что решение заключается в изменении функции hasNext() на firebase.util.js:

Cache.prototype.hasNext = function() { 
    return this.count === -1 || this.endCount >= this.start + this.count; 
}; 

Я поставил недостающий знак равенства (=) перед этого. начинаются

Я надеюсь, что это сработает для вас.

1

Проделайте scroll.next в тайм-аут, например:

loadMore: function(){ 
    $timeout(function() { 
    scrollRef.scroll.next(4); 
    }); 
},