2016-12-03 6 views
0

チャットメッセージの古いメッセージを読み込もうとします。古いメッセージをロードするFirebaseとAngularFire

しかし、angularfireはlimit関数を持っていません。endAt、startAt、limitToLast、limitToFirst関数を持っていて、古いメッセージだけを取得することはできません。

これは私のコードです:この問題は、より多くの機能をロードすると、メッセージのリスト全体をリフレッシュして、メッセージをリストに追加しないことにあります。

var ref = firebase.database().ref("messages/"+userId+"/"+agencyId); 

     .orderByChild('timestamp') 
     .limitToLast(2); 

     scope.messages = $firebaseArray(ref); 

     scope.loadMore = function(){ 

      ref 
       .orderByChild('timestamp') 
       .limitToLast(4); 

      scope.messages = $firebaseArray(ref); 
     }; 

答えて

1

だから、多くの研究、思考、再考の後。私は、チャットメッセージのためにもっと多くのメッセージをロードするために解決策を講じました。

var ref = firebase.database().ref(); 
     var messagesRef = ref.child("messages/"+userId+"/"+agencyId); 
     var query = messagesRef 
      .orderByChild("timestamp") 
      .limitToLast(10); 

     var list = $firebaseArray(query); 

     scope.blockMessages = [{ 
      list: list 
     }]; 

     scope.loadMore = function(){ 

      query = messagesRef 
       .orderByChild("timestamp") 
       .endAt(list[0].timestamp) 
       .limitToLast(10); 

      list = $firebaseArray(query); 
      list.$loaded().then(function(x){ 
       scope.blockMessages.unshift({ 
        list:list 
       }) 
      }); 
     }; 

loadMore関数は、前の10レコードを取得し、新しいメッセージブロックを作成します。メッセージの各ブロックには10個のレコードがあり、loadMoreをクリックするたびに最後の10個のレコードが検索されます。

関連する問題