2014-10-06 7 views
6

Ich benutze Angular ng-Optionen, um eine mit mehreren Optionen als Auswahl der Elternkategorie der aktuellen Kategorie anzuzeigen, im Grunde enthalten diese Optionen alle vorhandenen Kategorien, und ich muss ausschließen die aktuelle Kategorie von ng-options, die durchaus Sinn machen, weil eine Kategorie nicht die Elternkategorie von sich selbst sein kann. Wie mache ich das? Zur Zeit habe ich folgenden Code:AngularJS ng-Optionen zum Ausschließen eines bestimmten Objekts

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

Antwort

24

Sie sollten Filter verwenden.

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

Funktioniert wie ein Charme. Danke, ich akzeptiere beide als die richtige Antwort – dulan

+0

Ich sehe, dass dies ein Problem hat, sagen wir, aktuelle Kategorie Name ist "Pferd", gibt es eine andere Kategorie namens "weißes Pferd", mit diesem Filter filtert diese beiden Kategorien, aber Ich möchte nur die aktuelle Kategorie "Pferd" filtern. – dulan

+1

Schau dir das an: http://stackoverflow.com/questions/18242520/exact-filter-in-angular/18243147#18243147 –

1

Sie könnten einen Filter verwenden

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

ich eine kleine Geige mit einem exmaple von erstellt haben, wie es zu benutzen: http://jsfiddle.net/krausekjaer/tnqrqk2w/3/

+0

Funktioniert wie ein Charme! Danke, ich akzeptiere beides als die richtige Antwort. – dulan

0

Dank @Krause und @Kamil R für die Antwort, aber ich fand ein Problem bei der Verwendung ihrer Lösung, wie ich in früheren Kommentaren erwähnt habe, wenn es zwei Kategorien mit einem Namen als Teilzeichenfolge eines anderen gibt, wird der Filter beide streichen. Zum Beispiel Kategorien wie: Süßigkeiten candybar Mit

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

werden beide herauszufiltern, um sicherzustellen, dass nur bekommt man filtriert, landete ich einen benutzerdefinierten Filter zu schreiben:

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

und in html, verwende ich den Filter wie folgt aus:

<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

Versuchen Sie diese

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