2016-11-21 3 views
0

Im mit AngularFire+Firebase und haben Daten bei firebase-database.Firebase Bereich Abfrage

Im Daten mit Smart Table

Mein Problem zu Paginieren versucht, ist, dass ich weiß nicht, wie Abfrage reichen, ohne jedes Kind Angabe i, e Aufzeichnungen holen von Datensatz # 25 bis 35

Below Abfrage gibt mir zuerst 5 Datensätze

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

jetzt Im Versuch, Aufzeichnungen zu bekommen nächsten 5, 6 bis 10 und ich versuchte, unter

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

aber es Fehler geben, dass startAt und endAt nicht mit limit

Antwort

1

Im Allgemeinen Paginierung ist eine gute Passform für Firebase ist nicht Echtzeit-Datenmodell/API wie folgt verwendet werden. Sie versuchen, einen SQL SKIP-Operator zu modellieren, der nicht mit der Firebase-Datenbank funktioniert.

Wenn Sie jedoch die Seitennummerierung in Firebase modellieren möchten, sollten Sie einen "Ankerpunkt" verwenden.

Wenn Sie die erste Seite geladen haben, wird das letzte Element auf dieser Seite zum Ankerpunkt. Wenn Sie dann die nächste Seite laden möchten, erstellen Sie eine Abfrage, die am Ankerpunkt beginnt und n + 1 Element lädt.

In Pseudo-Code (es ist real JavaScript, ich habe es einfach nicht laufen):

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 
}); 

Wenn Sie nun die nächste Seite der Objekte laden möchten, erstellen Sie eine neue Abfrage, die auf der beginnt Anker-Schlüssel:

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

ein paar Dinge zu beachten:

  • Sie scheinen einen Ansatz von der Firebase 1.x SDK zu verwenden, wie zum Beispiel eine leere startAt(). Während dieser Code möglicherweise noch funktioniert, verwenden meine Snippets die Syntax/das Idiom für das 3.x SDK.
  • Für die zweite Seite müssen Sie ein zusätzliches Element laden, da das Ankerelement für beide Seiten geladen wird.
  • Wenn Sie in der Lage sein möchten, zurück zu paginieren, benötigen Sie auch den Ankerschlüssel am Anfang der Seite.
+0

Danke für Ihre Antwort, ich erwarte immer Antwort von Ihnen, ich benutze Firebase 3.x. Allerdings habe ich diese leere startAt() von irgendwo auf SO.As nach Ihrer Antwort bedeutet es, dass ich sehr Start Ankerpunkt und letzten Ankerpunkt in dem Fall speichern muss, wenn Benutzer auf die letzte Seite oder goto zuerst zurück und ob Benutzer klickt zur nächsten oder vorherigen Seite gehen, muss auch verfolgt werden. Das Ergebnis der Theorie ist, dass es eine komplexe Aufgabe mit Firebase ist –