【问题标题】:limitTo(angularjs) or limitToFirst(firebase) don't work as expectedlimitTo(angularjs) 或 limitToFirst(firebase) 不能按预期工作
【发布时间】:2016-01-24 04:31:01
【问题描述】:

我正在尝试显示最新的广告,我将一些广告保存到 Firebase 并希望显示最后添加的广告,它们与时间戳属性一起存储。

如果我创建没有 limitTo 的 ng-repeat,它会按预期工作,但是当我使用 limitTo 甚至 limitToFirst 时,它不会'没有按预期工作,它正确显示了我将在开始时显示的项目数量,但它跳过了其中一些,当我单击加载更多按钮时,它会加载更多广告并显示应该在那里的广告开始。

请注意,它应该显示两个日期为 27th oct 的广告,但它只显示一个。

这里有一个带有演示的 plunkr: https://plnkr.co/edit/Ae8rlbD8Uob5TrAHrivz?p=preview

app.controller('publicCtrl', function($scope, $firebaseArray) {
  $scope.loadmore = 6;
  $scope.latest = "-Addate";
  var listads = new Firebase("https://milocal.firebaseio.com/Users/Ovalle");
  $scope.listads = $firebaseArray(listads);

  $scope.loadmoreads = function(){
    //console.log("Cargando anuncios");
    $scope.loadmore += 2;
    $scope.listads = $firebaseArray(listads);
    console.log($scope.loadmore);
  }

});

在 HTML 中:

ng-repeat="ads in filteredAds = (listads | limitTo: loadmore | orderBy: latest)"

希望有人能解释我做错了什么。

谢谢。

【问题讨论】:

  • 您绝对没有从 Firebase 的查询中过滤任何内容。 $firebaseArray(Firebase("https://milocal.firebaseio.com/Users/Ovalle")) 将从该位置加载所有孩子。您能否指出定义 limitToorderBy 的文档?这样我就有希望了解它应该如何工作。
  • 您首先限制数组,有效地获取无序数组的前 6 个元素,然后对这 6 个元素进行排序。您想要相反:对数组进行排序以使最新的在前,并且只显示前 6 个:listads | orderBy: latest | limitTo: loadmore
  • @FrankvanPuffelen 感谢您的帮助。 limitTo 和 orderBy 我认为来自 angularjs 方面,我使用它们来尝试过滤从该查询中检索到的数据。但是从firebase方面我也尝试 var listads = new Firebase("milocal.firebaseio.com/Users/Ovalle"); $scope.listads = $firebaseArray(listads.orderByChild("-Addate").limitToFirst(6)); 但它也不起作用或也许我错过了什么。
  • @JBNizet 效果很好,现在我看到我只需要更改这些指令的顺序。我非常理解你所说的话,如果我没有找到一个 Firebase 方面的方法来做同样的事情,我会那样做。非常感谢

标签: angularjs firebase angularfire


【解决方案1】:

我把你的 Plunkr 改成了这样:

var app = angular.module('plunker', ["firebase"]);

app.controller('publicCtrl', function($scope, $firebaseArray) {
  $scope.loadmore = 1;
  $scope.latest = "-Addate";
  var listads = new Firebase("https://milocal.firebaseio.com/Users/Ovalle");
  var query = listads.orderByChild("-Addate").limitToFirst($scope.loadmore);
  $scope.listads = $firebaseArray(query);

  $scope.loadmoreads = function(){
    $scope.loadmore += 2;
    var query = listads.orderByChild("-Addate").limitToFirst($scope.loadmore);
    $scope.listads = $firebaseArray(query);
  }

});

它最初加载 2 个项目。然后,当您单击“加载更多”按钮时,它会加载 4。然后是 6,等等。

更新/分叉 plunkr:https://plnkr.co/edit/MUMerL?p=preview

【讨论】:

  • 唯一的问题是订购不正确,因为我想显示最后添加的广告,这就是为什么我有 orderByChild("-Addate") 而不仅仅是 添加用于逆序
  • 搜索和搜索我发现这篇文章准确地解释了我需要什么link,我试图存储一个负时间戳但无法做到。如果我手动将它存储在 Firebase 中,那么我可以看到我想要的顺序,但问题是我不知道如何通过代码存储它们,任何示例?
猜你喜欢
  • 1970-01-01
  • 2018-03-21
  • 2014-09-22
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2013-05-28
相关资源
最近更新 更多