Javascript 如何仅在从firebase获取所有数据时使用Limito过滤器
我只想显示3个最新的评论(每个评论都有“id”值),但是Limito和orderBy过滤器在这里不能正常工作。我猜这是因为当过滤器运行时,还没有来自firebase的数据 如何仅在类别.$loaded()==true时应用这些筛选器?我尝试使用自定义过滤器,但未能正确使用Javascript 如何仅在从firebase获取所有数据时使用Limito过滤器,javascript,angularjs,firebase,angularjs-filter,Javascript,Angularjs,Firebase,Angularjs Filter,我只想显示3个最新的评论(每个评论都有“id”值),但是Limito和orderBy过滤器在这里不能正常工作。我猜这是因为当过滤器运行时,还没有来自firebase的数据 如何仅在类别.$loaded()==true时应用这些筛选器?我尝试使用自定义过滤器,但未能正确使用 <div ng-repeat="category in categories"> <div ng-repeat="vendor in category.vendors">
<div ng-repeat="category in categories">
<div ng-repeat="vendor in category.vendors">
<div ng-repeat="review in vendor.reviews | orderBy: -id | limitTo:3">
<img src="img/placeholder-avatar.jpg" alt="" />
<div class="right-content">
<h4>{{ vendor.name }}</h4>
<div class="stars"></div>
<span class="category"> {{ category.name }} </span>
<p> {{ review.body | limitTo:100 }}{{ review.body.length < 100 ? '' : '...'}} </p>
</div>
</div>
</div>
</div>
我的firebase结构(在这里,我试图查看分配给类别内供应商的评论):
这将有助于在类别之后加载此项。$loaded()==true:
html代码没有问题,发布控制器代码。如果在第一个ng重复测试类别,您可以尝试添加ng。加载$loaded,但我认为这不是问题所在。结果究竟是什么?它会忽略过滤器呈现所有结果?是的,它会显示所有评论。也许你是对的,这不是问题所在,如果像你所说的那样添加ng不会改变任何事情,它仍然会加载所有的评论。只有review.body上的筛选器才能正常工作。
orderBy
filter如果要输入字符串参数,请尝试更改为orderBy:'-id'
为什么要先从服务器下载所有数据,然后筛选用户未指定的内容?将查询发送到Firebase服务器并让其处理所能处理的内容会更高效:$scope.categories=$firebaseArray(ref.orderByChild('body_length').endAt(100).limitToFirst(100))
。您需要添加一个保持最新的body\u length
属性。但好处是您的数据下载量会小得多。非常感谢,但我不知道如何运行filter Limito:insideif(categories.$loaded()){$filter('Limito')(elms,3);}
这个方向的东西?您能用JSFIDLE发送吗?我会帮助你的。)
app.controller('mainCtrl', function($scope, $http, $firebaseObject) {
var ref = new Firebase("https://scorching-torch-1679.firebaseio.com");
$scope.categories = $firebaseObject(ref);
});
<div ng-if="categories.$loaded()">
<div ng-repeat="category in categories">
<div ng-repeat="vendor in category.vendors">
<div ng-repeat="review in vendor.reviews | orderBy: -id | limitTo:3">
<img src="img/placeholder-avatar.jpg" alt="" />
<div class="right-content">
<h4>{{ vendor.name }}</h4>
<div class="stars"></div>
<span class="category"> {{ category.name }} </span>
<p> {{ review.body | limitTo:100 }}{{ review.body.length < 100 ? '' : '...'}} </p>
</div>
</div>
</div>
</div>
app.filter('myFilter', function(){
function myFilter(elms, filters) {
if(categories.$loaded()) {
// do filter stuff..
} else {
// return all
}
};
});