2016-12-23 2 views
2

フィルタを入れ子にしたリストを持っています。イオン角度ネストされたngリピートフィルター、空の場合はタイトルを隠す

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

フィルターが良い作品が、私はフィルタがその日の0活動を返したときに日ヘッダー(group.title)を非表示にしたいと思います:

オブジェクトは次のようになります。

私はこのようないくつかの答えが見つかりました:AngularJS - hide parent element if children loop is empty (filtered)

をそして、いや、成​​功して実装してみました。

これは私のコードです:

ビューあなたは答えの上にリンクされ、他のポストとして

<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('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; 
    } 
}); 

よろしく

+0

その他の設定はすべて正しくなっていますか?期待どおりのng-repeatの出力ですか? –

+0

'group.title'、' item.title'、 'item.start'、' item.end'のデータは教えてください –

+0

@ThomasJuranekはい、データは適切にフィルタリングされていますが、例えば "ヨガ」と月曜日にその存在だけで、出力は次のようになります。 月曜日 ヨガ 木曜日 水曜日 火曜日 金曜日 土曜日 私が表示したい: 月曜日@CharanCherry group.title =は名前がある – llermaly

答えて

2

を表示しません。

<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> 
+0

作品!私はこのようなことに挑戦する日だった。どうもありがとうございました !! – llermaly

1

、ngShowは、このシナリオで動作します。

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

それは動作しません..私は多くのng-showの組み合わせで試してみましたが、解決策のようにそのようには見えません。アクティビティのないタイトルはまだ表示されません。 – llermaly

1

group.acts.lengthが0より大きい場合は、タイトルを表示してください。そうでなければ、あなたはフィルタが適用された後、その後リピータの中間結果を格納するエイリアスの式を使用することができますどれ

<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> 
+0

動作しません。フィルタを使用しているように見えるgroup.acts.lengthはフィルタリング時に0に変更されません。 – llermaly

+0

'acts'はアクティビティの配列なので、うまくいくはずです。したがって、何らかのアクティビティがある場合、配列の長さはゼロより大きくなります。 titleは、acts.lengthが0より大きい場合にのみ表示されます。何か問題があればコンソールで確認してください。 –

関連する問題