2016-11-21 262 views
0

Im使用AngularFire+Firebase且數據位於firebase-databaseFirebase範圍查詢

我試着用Smart Table

我的問題進行分頁的數據是,我不知道如何不指定任何孩子I,E取從記錄#25記錄,以35

範圍查詢下面的查詢給了我第一5條

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

現在我試着讓接下來的5條記錄,從6到10,我嘗試下面

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

,但它給錯誤startAtendAt不能像這樣使用與limit

回答

1

一般分頁是不適合用於火力地堡的實時數據模型/ 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); 

有幾件事情,這裏要注意:

  • 你似乎使用從火力地堡1.x的SDK的方法,如一個空的startAt()。儘管這些代碼仍然可以工作,但我的代碼片段使用了3.x SDK的語法/習慣用法。
  • 對於第二頁,您需要加載一個額外的項目,因爲兩個頁面都加載了錨點項目。
  • 如果您希望能夠分頁回來,您還需要頁面開始處的定位鍵。
+0

感謝您的回答,我總是期待您的回答,我使用Firebase 3.x.然而,我從SO的某個地方拿走了那個空的startAt()。根據你的回答,這意味着如果用戶點擊轉到最後一頁或者第一個轉到後面,用戶是否需要存儲非常開始的定位點和最後一個定位點,以及用戶前往下一頁或前一頁,必須對其進行跟蹤。所以理論的結果是,使用Firebase是一項複雜的任務 –