【问题标题】:How to check if all documents are loaded with Firebase.util pagination如何检查是否所有文档都加载了 Firebase.util 分页
【发布时间】:2016-02-08 13:19:20
【问题描述】:

我如何检查是否必须停止调用loadMore() 函数,因为所有文档都已从数据库中加载?

在下面的示例中,我使用的是 Ionic,但 AngularJS 应用程序中的 ng-infinite-scroll 也是如此。

这是我的实际代码:

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;

}

【问题讨论】:

  • 已经尝试使用ref.scroll.hasNext() 方法。问题是它总是返回 false 所以我不知道我应该使用什么样的属性。
  • 您应该使用 hasNext() 而您发布的 sn-p 没有。如果hasNext()总是返回false,要么是有bug,要么是你用错了。
  • @FrankvanPuffelen 抱歉,现在我正在编辑我的原始帖子以包含它。

标签: javascript angularjs ionic-framework firebase firebase-util


【解决方案1】:

在超时时执行scroll.next,例如:

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我认为解决方案是修改 firebase.util.js 上的 hasNext() 函数:

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

    我在 this.start

    之前添加了一个缺失的等号 (=)

    我希望它对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多