码:
<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>
情况:
lastID是创建的最后一个帖子的ID.他们向后(从-1到lastID).
(帖子从最新到最旧(从lastID到-1)).
例如,如果有16个帖子,lastID = -16.
如果我删除帖子-13到-5和帖子-3,lastID保持在-16.
这意味着当页面加载时,在3个第一个帖子(-16到-14)被加载后,没有帖子显示,我需要反复滚动以显示后4个.
题:
我如何确保如果删除某些帖子,我的无限滚动脚本会跳过不存在的帖子的id,并且只加载3个最近的帖子?
我检查了什么
我看了看:
Display posts in descending posted order
但我不知道如何在我的无限滚动中实现这些解决方案.有任何想法吗 ?
解决方法
如果我正确理解你,你不必使用结束.这可以使用startAt限制来实现
fb.orderByChild('id').startAt(_start).limit(n)...
并使用布局来订购商品下降.使用它,您不必担心id的序列,如果它们是连续的
UPDATE
你可以做得更简单.只需更新您的最新价值
fb.orderByChild('id').startAt(_start).limit(_n).on("child_added",function(dataSnapshot) { $scope.data.push(dataSnapshot.val()); $scope.$apply() _start = dataSnapshot.child('id').val() console.log("THE VALUE:"+$scope.data); });
在这种情况下,您的_start将始终保持最后一个ID,您可能不用担心已删除的元素.或者,您可以使用临时变量来存储最后的id值,并在startAt中使用它