AngularJS OrderBy обновляет исходный массив

Я использую встроенный фильтр Angular OrderBy для своих элементов по дате, и он работает, как и ожидалось, в DOM, но я думал, что он обновит сам массив, чтобы я мог работать с новым порядком элементов.

У кого-нибудь есть идеи, как этого добиться?

Спасибо.

P.S. Я использую AngularJS 1.3.14, если это что-то меняет.


person Axl    schedule 17.05.2016    source источник
comment
ng-repeat не влияет на массив, а только на то, что отображается. Если вы хотите, чтобы фактический массив был отсортирован, вам нужно будет сделать это в своем контроллере.   -  person Mike Feltman    schedule 17.05.2016
comment
Можете ли вы показать свой код?   -  person Matheno    schedule 17.05.2016


Ответы (2)


Вы должны переупорядочить свой массив из своего контроллера, прежде чем привязывать его к DOM. Это также более эффективно, поскольку Angular не нужно пересчитывать порядок в каждом цикле дайджеста.

$scope.myOrderedArray = order( $scope.myArray );

И в ДОМ

<div ng-repeat="item in myOrderedArray"> ... </div>
person floribon    schedule 17.05.2016
comment
Спасибо помог очень ценю - person Axl; 17.05.2016

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

Вы должны внедрить службу $filter в свой контроллер, а затем использовать ее программно следующим образом:

var orderBy = $filter('orderBy');
$scope.array = orderBy(unsortedArray, expression);

Подробнее об этом фильтре можно узнать здесь.

Конечно, если ваше выражение сортировки динамическое, то вам придется обновлять ссылку на массив при каждом его изменении, что не всегда идеально, но абсолютно жизнеспособно при меньших объемах данных.

person Kazimieras    schedule 17.05.2016
comment
Спасибо, это тоже помогло. - person Axl; 17.05.2016