【发布时间】: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"))将从该位置加载所有孩子。您能否指出定义limitTo和orderBy的文档?这样我就有希望了解它应该如何工作。 -
您首先限制数组,有效地获取无序数组的前 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