2016-11-21 8 views
0

ImはAngularFire+Firebaseを使用しており、データはfirebase-databaseです。 Smart TableFirebaseの範囲のクエリ

私の問題でデータのページ付けしようとしている

イムは、私は、クエリが最初に私を与えるの下には、私は、eが35

にレコード#25からレコードをフェッチ子を指定せずに、クエリの範囲する方法を知らないということです5つのレコード

var queryFIrst = visitRef.startAt().limitToFirst(5); 
$scope.Visits = $firebaseArray(queryFIrst); 

は今、イムは6から10まで、5次のレコードを取得しようと、私は

var queryFIrst = visitRef.startAt().limitToFirst(5).endAt().limitToFirst(5); 
$scope.Visits = $firebaseArray(queryFIrst); 
下回ってみました

それはstartAtendAtは一般改ページにlimit

答えて

1

と、このように使用することができないというエラーを与えることがFirebaseのリアルタイムデータモデル/ APIに適していないです。 SQL SKIP演算子をモデル化しようとしていますが、Firebaseデータベースでは動作しません。

しかし、Firebaseでページネーションをモデル化する場合は、「アンカーポイント」があると考えるべきです。

最初のページを読み込むと、そのページの最後の項目がアンカーポイントになります。次のページをロードするときは、アンカーポイントから開始してn + 1のアイテムをロードするクエリを作成します。擬似コードで

(それは本当のJavaScriptのだ、私はちょうどそれを実行しなかった):あなたがアイテムの次のページをロードする際

var page1 = visitRef.orderByKey().limitToFirst(5); 
var anchorKey; 
page1.on('child_added', function(snapshot) { 
    anchorKey = snapshot.key; // this will always be the last child_added we received 
}); 

今、あなたがから始まる新しいクエリを作成しますキーアンカー:

var page2 = visitRef.orderByKey().startAt(anchorKey).limitToFirst(6); 

ここで注意すべきいくつかのこと:

  • あなたはFirebase 1.xのSDKからのアプローチを使用しているように見える、など空の場合startAt()。そのコードは引き続き動作しますが、私のスニペットは3.x SDKの構文/イディオムを使用します。
  • 2番目のページでは、アンカーアイテムが両方のページにロードされているため、余分なアイテムを1つ追加する必要があります。
  • 改ページできるようにするには、ページの先頭にアンカーキーも必要です。
+0

あなたの答えをありがとう、私はいつもあなたからの答えを期待しています、私はFirebase 3.xを使用しています。しかし、私はその空のstartAt()をSOのどこかから取り出しました。あなたの答えによると、ユーザーが最後のページにジャンプするか、最初に戻るかどうか、ユーザーが最初に戻るかどうか、非常に最初のアンカーポイントと最後のアンカーポイントを格納しなければならないということです次のページまたは前のページに行くと、それも追跡する必要があります。理論の結果、Firebaseとの複雑な作業です –