Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅在从firebase获取所有数据时使用Limito过滤器_Javascript_Angularjs_Firebase_Angularjs Filter - Fatal编程技术网

Javascript 如何仅在从firebase获取所有数据时使用Limito过滤器

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

我只想显示3个最新的评论(每个评论都有“id”值),但是Limito和orderBy过滤器在这里不能正常工作。我猜这是因为当过滤器运行时,还没有来自firebase的数据

如何仅在类别.$loaded()==true时应用这些筛选器?我尝试使用自定义过滤器,但未能正确使用

<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:inside
if(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 
            }
       };
});