2016-03-30 13 views
-2

以下のように問題を解決するために角度フィルタを実行するのは苦労しています。アレイ内の角度jsフィルタ配列

フィルタロジックは以下の通りである:その項目の全てlistItemのが持っている場合qtyLeft = 0
1)は、そのアイテムのlistItemのいずれかがqtyLeft == 0を有する場合、その項目
2)を表示していません、アイテムのタイトルを表示するだけでなく、qtyLeftの== 0

を持ってlistItemのここに私のデータ構造、項目の配列の基本的な例ですcoressponding:

:ここ
$scope.jsonList = [ 
    { 
     _id: '0001', 
     title: 'titleA', 
     list: { 
      listName: 'listNameA', 
      listItem: [ 
       { 
        name: 'name1', 
        qtyLeft: 0 
       }, 
       { 
        name: 'name2', 
        qtyLeft: 0 
       }, 
      ] 
     } 
    }, 
    { 
     _id: '0002', 
     title: 'titleB', 
     list: { 
      listName: 'listNameB', 
      listItem: [ 
       { 
        name: 'name3', 
        qtyLeft: 2 
       }, 
       { 
        name: 'name4', 
        qtyLeft: 0 
       }, 
      ] 
     } 
    }, 
    { 
     _id: '0003', 
     title: 'titleC', 
     list: { 
      listName: 'listNameC', 
      listItem: [ 
       { 
        name: 'name5', 
        qtyLeft: 2 
       }, 
       { 
        name: 'name6', 
        qtyLeft: 2 
       }, 
      ] 
     } 
    }, 
] 

が最終予想される結果であるが
<div ng-repeat="item in jsonList | filter: filterLogic"> 
    <div> </div> 
</div> 

// final outcome 
<div> 
    <div>Title: titleA, ListItem: Name1, Name2</div> 
    <div>Title: titleB, ListItem: Name4</div> 
</div> 
+1

あなたが働いていないことしようとしているものをご提示ください。これはコード作成サービスではありません。試行したことを示すことが期待されます – charlietfl

答えて

1

作成済みのPlunkrはこちらです。 https://plnkr.co/edit/SRMgyRIU7nuaybhX3oUC?p=preview

このディレクティブを使用する場合は、プロジェクトにunderscore.js libを含めることを忘れないようにしてください。

<div ng-repeat="jsonItem in jsonList | showZeroElement track by $index"> 
    <div>Title:{{ jsonItem.title}}, ListItem:<span ng-repeat="item in  
     jsonItem.list.listItem track by $index" ng-if="item.qtyLeft==0"> 
    {{item.name}}</span> 
    </div> 
</div> 

そして

app.filter('showZeroElement', function() { 
return function(input) { 
var items = [] 
angular.forEach(input, function(value, index) { 
    angular.forEach(value.list.listItem, function(val, i) { 
    var found = _.findWhere(items, { 
     'title': value.title 
    }) 
    if (val.qtyLeft === 0 && found === undefined) { 
     items.push(value) 
    } 
    }) 
}) 
return items 
} 
}) 
関連する問題