Code:Wie ordne ich chronologisch Daten in meiner Firebase infinite scroll?
<script>
var app = angular.module('app', ['firebase']);
app.controller('ctrl', function ($scope, $firebaseArray, $timeout) {
console.log(<%=lastID%>);
$scope.data = [];
var _n = Math.ceil(($(window).height() - 50)/(350)) + 1;
var _start = <%= lastID %>;
var _end = <%= lastID %> + _n - 1;
$scope.getDataset = function() {
fb.orderByChild('id').startAt(_start).endAt(_end).limitToLast(_n).on("child_added", function(dataSnapshot) {
$scope.data.push(dataSnapshot.val());
$scope.$apply()
console.log("THE VALUE:"+$scope.data);
});
_start = _start + _n;
_end = _end + _n;
};
$scope.getDataset();
window.addEventListener('scroll', function() {
if (window.scrollY === document.body.scrollHeight - window.innerHeight) {
$scope.$apply($scope.getDataset());
}
});
});
// Compile the whole <body> with the angular module named "app"
angular.bootstrap(document.body, ['app']);
</script>
LAGE:
lastID ist die ID des letzten Beitrag erstellt. Sie gehen rückwärts (von -1 bis lastID).
Diese Lösung funktioniert einwandfrei, außer wenn einige Posts gelöscht werden.
(Beiträge sind von der neuesten zu ältesten (von lastID bis -1)) bestellt.
Zum Beispiel, wenn es 16 Posts gibt, lastID = -16.
Wenn ich die Posts -13 bis -5 und Post-3 lösche, bleibt lastID bei -16.
Das bedeutet, dass beim Laden der Seite keine Posts erscheinen, nachdem die ersten drei Posts (-16 bis -14) geladen sind und ich mehrmals blättern muss, um Post -4 zu erhalten.
FRAGE:
Wie kann ich sicherstellen, dass, wenn einige Beiträge gelöscht werden, meine unendliche Scroll-Skript die IDs der inexisting Beiträge überspringen wird und laden nur die drei am nächsten Beiträge?
WAS ICH üBERPRüFTE:
ich ausgesehen:
Display posts in descending posted order
Aber ich bin nicht sicher, wie ich diese Lösungen in meinem unendlichen Scroll implementieren würde. Irgendwelche Ideen ?
Ihre Argumentation ist solide und die drei Elemente werden geladen, wenn ich zum Beispiel -2, -3 und -5 in einer Liste von -1 bis -6 lösche. Problem ist: seit wir das EndeAt() entfernt haben, kann ich ein zweites Mal scrollen und -2 und -3 werden wieder geladen. In der Tat, lastID = -6 für den ersten Datensatz, aber lastID = -3 für den ersten Bildlauf und letzte ID = 0 für den zweiten Bildlauf. – Coder1000
Ich müsste die ID des zuletzt geladenen Elements abrufen und _start darauf setzen. Aber wie kann ich das letzte Element innerhalb meiner Firebase-Bestellfunktion auswählen? – Coder1000
@ Coder1000 Bitte schauen Sie auf meine Antwort aktualisiert –