2016-04-01 4 views
2

https://github.com/a8m/angular-filter/AngularJS einzigartige Filter - nicht immer eindeutige Feldlänge

ich die oben AngularJS-Filter-Bibliothek ist mit einzigartiger Eigenschaft in ng-Wiederholung zu verwenden.

unten ist mein Code

<div class="rankblock" ng-repeat="item in sports.Ranks.Rank |unique:'_position'> 
<span> {{sports.Ranks.Rank.length}}</span> // 
</div> 

nach einzigartig in ng-repeat meiner Rang Arraylänge wird zu 6, aber es zeigt immer noch 9 (die ursprüngliche Länge Arr) in der Ausgabe.

+0

Der Filter wirkt sich nur auf die angezeigten Daten aus, nicht auf das ursprüngliche Array. Daher zeigt 'sports.Ranks.Rank.length' die ursprüngliche Länge wie erwartet an. [Siehe diesen Artikel] (http://angular-tips.com/blog/2014/08/tip-accessing-filtered-array-outside-ng-repeat/), um zu bekommen, was Sie erwarten. – GillesC

Antwort

3

Der Filter kehrt intern in ng-repeat ein neues Array zurück. Dies ist die Idee des Filters - Filtern, aber vermeiden Sie es, die Eingabe zu ändern. Mit anderen Worten:

ng-repeat="item in sports.Ranks.Rank | unique:'_position' 

sagt ng-Wiederholung durch das Ergebnis der Filterfunktion zu gehen, die ohne Duplikate ein neues Array ist, wenn hier

<span> {{sports.Ranks.Rank.length}}</span> 

Sie noch die Länge des Originals gelesen ein.

Wenn Sie die neue Array-Länge anzeigen möchten, können Sie z. versuchen Sie folgendes

{{ (sports.Ranks.Rank | unique:'_position').length }} 

(hat nie so etwas getan, vielleicht funktioniert das), immer noch ist dies keine performante Lösung. Tatsächlich würde ich Deduplizierung auf einer Controller-Ebene machen.

+0

ja es gibt die ursprüngliche Array-Länge..nicht die einzigartige Array-Länge – shank

+1

@shank ja, und das ist richtiges Verhalten – smnbbrv

+1

Vielen Dank, dass Sie so muchhh smnbbrv .. !!! – shank