2016-04-01 1 views
2

https://github.com/a8m/angular-filter/angularJs уникального фильтр - не получать уникальную длину массива

Я использую вышеуказанную библиотеку Angularjs-фильтр использовать уникальное свойство в нг-повторе.

ниже мой код

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

после уникальной в нг-повторить мой ранг длина массива становится 6, но он все еще показывает 9 (исходную длину ARR) на выходе.

+0

Фильтр влияет только на отображаемые данные, а не на исходный массив, поэтому 'sports.Ranks.Rank.length' отображает исходную длину, как ожидалось. [См. Эту статью] (http://angular-tips.com/blog/2014/08/tip-accessing-filtered-array-outside-ng-repeat/), чтобы получить то, что вы ожидаете. – GillesC

ответ

3

Фильтр внутренне возвращается в ng-repeat a новый массив. Это идея фильтра - фильтровать, но не менять ввод. Другими словами:

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

говорит нг-повтора, чтобы пройти через результат функции фильтра, который представляет собой новый массив без дублей, когда здесь

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

вы еще прочитать длину оригинала один.

Если вы хотите отобразить новую длину массива, которую вы можете сделать, например. попробуйте следующее

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

(никогда ничего не делают такие вещи, как, что, может быть, это работает), до сих пор это не производительное решение. На самом деле то, что я хотел бы сделать, это дедупликация на уровне контроллера.

+0

да он возвращает исходную длину массива..не уникальную длину массива – shank

+1

@shank да, и это правильное поведение – smnbbrv

+1

Спасибо вам большое, что smnbbrv .. !!! – shank

Смежные вопросы