2014-10-06 18 views
6

Używam opcji kątowych, aby pokazać kilka opcji jako opcje kategorii nadrzędnej bieżącej kategorii, w zasadzie te opcje zawierają wszystkie istniejące kategorie i muszę wykluczyć bieżąca kategoria z opcji ng, co ma sens, ponieważ kategoria nie może być kategorią nadrzędną. Więc jak to zrobić? Obecnie mam następujący kod:AngularJS ng-options, aby wykluczyć określony obiekt

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

Odpowiedz

24

Należy użyć filtra.

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

Działa jak urok. Dzięki, akceptuję obie jako poprawną odpowiedź. – dulan

+0

Widzę, że to jest problem, powiedzmy, że obecna nazwa kategorii to "koń", jest inna kategoria o nazwie "biały koń", przy użyciu tego filtra odfiltrowuje obie te kategorie, ale chcę tylko przefiltrować aktualną kategorię, którą jest "koń". – dulan

+1

Spójrz na to: http://stackoverflow.com/questions/18242520/exact-filter-in-angular/18243147#18243147 –

1

Można użyć filtru

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

Utworzyłem małą skrzypce z exmaple, jak go używać: http://jsfiddle.net/krausekjaer/tnqrqk2w/3/

+0

Działa jak urok! Dzięki, akceptuję obie jako poprawną odpowiedź. – dulan

0

Dzięki @Krause i @Kamil R dla Odpowiedź, ale znalazłem problem przy korzystaniu z ich rozwiązania, jak już wspomniałem we wcześniejszych komentarzach, jeśli istnieją 2 kategorie o jednej nazwie jako podłańcuchu innego, filtr wykreśli oba z nich. Na przykład, kategorie takie jak: cukierków cukierek Korzystanie

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

filtruje zarówno z nich na zewnątrz, w celu upewnienia się tylko jeden zostaje przefiltrowany, skończyło się na piśmie filtr niestandardowy:

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

w html, używam filtra takiego:

<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

Wypróbuj to:

<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> 
Powiązane problemy