CODE:

<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。

问题:

如何确定如果删除了某些帖子,我的Infinite Scroll脚本将跳过不存在的帖子的ID,而仅加载最近的3个帖子?

我检查过的内容:

我看着这个:

Display posts in descending posted order

但是我不确定如何在无限滚动中实现这些解决方案。有任何想法吗 ?

最佳答案

如果我对您的理解正确,则不必使用end。这可以使用startAt + limit来实现

fb.orderByChild('id').startAt(_start).limit(n)...

并使用布局对降序的项目进行排序。使用此方法,如果ID是连续的,则不必担心ID的顺序

更新

您可以更简单地完成此操作。只需以新的值(value)更新您的开始
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中使用它

10-08 15:22