2014-10-06 34 views
6

我正在使用角度ng選項來顯示具有多個選項作爲當前類別的父類別的選項,基本上這些選項包含所有現有類別,並且我需要排除ng選項中的當前類別,這很有意義,因爲類別不能是它自己的父類別。那我該怎麼做?目前,我有以下代碼:用於排除特定對象的AngularJS ng選項

<tr ng-repeat="category in allCategories"> 
    <th ng-bind="category.name"></th> 
    <th> 
     <select ng-options="everyCategory.name for everyCategory in allCategories"> 
      <option value="">Select parent category</option> 
     </select> 
    </th> 
</tr> 

回答

24

您應該使用的過濾器。

<select ng-options="everyCategory.name for everyCategory in allCategories | filter: { name: '!' + category.name }">...</select> 
+0

工程就像一個魅力。謝謝,我接受這兩個作爲正確的答案 – dulan 2014-10-06 12:03:59

+0

我看到這有一個問題,讓我們說當前類別名稱是'馬',還有另一個類別'白馬',使用此篩選器篩選出這兩個類別,但我想要過濾只是當前類別,這是'馬'。 – dulan 2014-10-17 02:06:35

+1

看看這個:http://stackoverflow.com/questions/18242520/exact-filter-in-angular/18243147#18243147 – 2014-10-17 11:00:07

1

你可以使用

<tr ng-repeat="category in allCategories"> 
    <th>{{category.name}}</th> 
    <th> 
    <select ng-options="everyCategory.name for everyCategory in allCategories | filter: {name: '!' + category.name}" ng-model="somthing"> 
     <option value="">Select parent category</option> 
    </select> 
    </th> 
</tr> 

我創建了一個小撥弄着如何使用它〔實施例的過濾器:http://jsfiddle.net/krausekjaer/tnqrqk2w/3/

+0

工程就像一個魅力!謝謝,我接受這兩個作爲正確的答案。 – dulan 2014-10-06 12:01:10

0

感謝@Krause和@Kamil R代表的回答,但是我在使用他們的解決方案時發現了一個問題,正如我在之前的評論中提到的那樣,如果有兩個類別的一個名稱作爲另一個的子字符串,那麼過濾器將會忽略它們兩個。例如,類別,如: 糖果 直板 使用

filter: { name: '!' + category.name } 

都將它們的過濾掉,以確保只有一個被過濾,我結束了編寫自定義過濾器:

app.filter('parentTaxonomyFilter', function(){ 
    return function(items, name){ 
     var arrayToReturn = [];   
     for (var i = 0; i < items.length; i ++){ 
      if (items[i].name != name) { 
       arrayToReturn.push(items[i]); 
      } 
     } 
     return arrayToReturn; 
    }; 
}); 

和在HTML中,我使用這樣的過濾器:

<select class="form-control" ng-init="taxonomy.parentTaxonomy=getParentTaxonomy(taxonomy)" ng-model="taxonomy.parentTaxonomy" ng-options="everyTaxonomy.name for everyTaxonomy in data.allTaxonomies|parentTaxonomyFilter:taxonomy.name"> 
    <option value="">select parent taxonomy</option> 
</select> 
0

試試這個

<tr ng-repeat="category in allCategories"> 
    <th>{{category.name}}</th> 
    <th> 
    <select ng-options="everyCategory.name for everyCategory in allCategories | filter: { name: '!' + category.name }" ng-model="somthing">...</select> 
     <option value="">Select parent category</option> 
    </select> 
    </th> 
</tr>