javascript – 如何按时间顺序在我的Firebase无限滚动中正确订购数据?

前端之家收集整理的这篇文章主要介绍了javascript – 如何按时间顺序在我的Firebase无限滚动中正确订购数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
码:
<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中使用它

猜你在找的JavaScript相关文章