简体   繁体   English

离子角嵌套ng-repeat过滤器,如果为空则隐藏标题

[英]Ionic angular nested ng-repeat filter, hide title if empty

I have a nested list with a filter , it has days and activities. 我有一个带有过滤器的嵌套列表,其中包含天数和活动。

objects looks like : 对象看起来像:

days:[ 
{name:"monday", acts[{title:"Zumba",start:"10am",end:"11am"},{}..]}...
]

Filter works good but I'd like to hide the day header (group.title) when filter returns 0 activities for that day. 过滤器效果很好,但是当过滤器返回当天的0个活动时,我想隐藏日期标题(group.title)。

I found some answers like this : AngularJS - hide parent element if children loop is empty (filtered) 我找到了一些类似的答案: AngularJS-如果子循环为空,则隐藏父元素(已过滤)

And tried to implement with no success. 并尝试实施没有成功。

This is my code : 这是我的代码:

view 视图

<ion-view view-title="{{titulo}}">
  <ion-content>
      <div class="container-hearder-image" style="background-image: url('{{img}}');" >
    </div>
    <h4>{{titulo}}</h4>
    <p>Seleccione Actividades</p>
      <div ng-repeat="c in colors">
          <ion-checkbox ng-click="includeColour(c)" class="item-bcg waves-effect waves-block waves-light"/> {{c}}
       </div>
    <ion-list ng-repeat="group in detailService.selected.days" >
        <div class="item item-divider bar bar-header bar-calm" >{{group.title}}</div>
        <ion-list ng-repeat="item in group.acts | filter:colourFilter">
          <ion-item >
            <h3>{{item.title}}</h3>
            {{item.start}} - {{item.end}}
          </ion-item>
        </ion-list>      
    </ion-list> 
  </ion-content>
</ion-view>

controller 调节器

.controller('HorarioCtrl', function($scope, $stateParams,detailService) {


    $scope.colors = ['Zumba','Combat','Spinning','HIIT','Pilates','Yoga'];
    $selected = detailService.selected
    $scope.detailService=detailService;
    $scope.titulo = detailService.selected.title;
    $scope.img = detailService.selected.img;
    colourIncludes = [];
    $scope.colourIncludes = colourIncludes

    $scope.includeColour = function(colour) {
        var i = $.inArray(colour, colourIncludes);
        if (i > -1) {
            colourIncludes.splice(i, 1);
        } else {
            colourIncludes.push(colour);
        }
    }

    $scope.colourFilter = function(fruit) {
        if (colourIncludes.length > 0) {
            if ($.inArray(fruit.title, colourIncludes) < 0)
                return;
        }

        return fruit;
    }
});

Regards 问候

You can use alias expression which will then store the intermediate results of the repeater after the filters have been applied. 您可以使用别名表达式,该别名表达式将在应用过滤器后存储转发器的中间结果。

<div class="item item-divider bar bar-header bar-calm" ng-if="filteredElements.length>0">{{group.title}}</div>
<ion-list ng-repeat="item in group.acts | filter:colourFilter as filteredElements">
 <ion-item >
   <h3>{{item.title}}</h3>
    {{item.start}} - {{item.end}}
  </ion-item>
</ion-list>  

正如您在上方链接的其他帖子所回答的那样,ngShow将在这种情况下工作。

<h3 ng-show="item.title != null">{{item.title}}</h3>

If group.acts.length greater than zero, show the title. 如果group.acts.length大于零,则显示标题。 Else, display none 否则,不显示

 <ion-list ng-repeat="group in detailService.selected.days" >
        <div ng-if="colourFilter.length>0" class="item item-divider bar bar-header bar-calm" >{{group.title}}</div>
        <ion-list ng-repeat="item in group.acts | filter:colourFilter">
          <ion-item >
            <h3>{{item.title}}</h3>
            {{item.start}} - {{item.end}}
          </ion-item>
        </ion-list>      
    </ion-list>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM