2015-02-06 69 views
0

我想過濾那些匹配對象內特定條件的對象列表中的對象ng-options通過ng選項中的數組進行過濾

例如,我有這樣的數據:由數組中的項目數過濾列表

{ 
     id:1, 
     type:"Type A", 
     name:"loc 1", 
     items:[ 
      {id:1, name:"item 1"}, 
      {id:2, name:"item 2"}, 
      {id:3, name:"item 3"}, 
     ] 
    }, 

我選擇這個樣子的

<select ng-model="test" ng-options="location as (location.name + ' ' + location.items.length + ' items') group by location.type for location in locations | filter:{items.length:filterBy.itemId}"> 
</select> 

以下作品中的例子,但什麼我想要做的是過濾那些具有條件的列表,例如具有id = 1的項目的所有對象。

這是一個與上述工作小提琴。

fiddle example

我想什麼/預期(僞)類似:

ng-options="location as (location.name + ' ' + location.items.length + ' items') group by location.type for location in locations | filter:{items{id:filterBy.itemId}}" 

它甚至有可能?

更新:上面的小提琴已經更新了@Marcos Sandrini的答案中的代碼,以備任何人需要時使用。

回答

0

如果你堅持NG選項,你總是有選擇地做任何你想用ng-repeat中的options標籤,並非所有事情的理想情況,但它在大多數情況下都能正常工作,並且更易於理解,特別是對於更復雜的情況。

<option value="{{location.id}}"> 
    {{location.name + ' ' + location.items.length + ' items' | orderBy: 'location.type' | filter:IdFilter(location,idToFilter)}} 
</option> 

只要確保你不使用NG-展示和NG-隱藏與選項標籤,它不會工作(使用NG-如果代替)。過濾器功能如下:

function IdFilter(location,idToFilter){ 
    var hasId = false; 
    angular.foreach(location.items, function(l){ 
    if (l.id===idToFilter) hasId = true; 
    } 
    return hasId; 
} 
+0

我不明白如何以任何方式過濾我的列表? – DeclanMcD 2015-02-06 11:28:58

+0

我現在補充說。檢查這是否給出你想要的結果。 – 2015-02-06 11:33:33

+0

我設法讓你的代碼在我的小提琴上工作,並更新了工作版本的小提琴,如果任何人想要它。該groupBy不工作,並拋出一個錯誤,所以我已經離開了那一刻。謝謝。 – DeclanMcD 2015-02-06 12:30:26

0

您可以通過一個函數過濾

this.filterFunction = function(item) { 
     return item.itemId===1; 
} 

等你就用

filter:filterFunction 
+0

我試過,但只有主過濾器的對象。所以在我的例子中它返回了id = 1的位置。不是我想要的。 – DeclanMcD 2015-02-06 11:29:52