2016-05-17 2 views
1

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

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

Спасибо.

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

+0

ng-repeat не влияет на массив, только то, что отображается. Если вы хотите, чтобы фактический массив был отсортирован, вам нужно будет сделать это в своем контроллере. –

+0

Можете ли вы показать свой код? – Matheno

ответ

2

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

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

И в DOM

<div ng-repeat="item in myOrderedArray"> ... </div> 
+0

Спасибо большое спасибо – Axl

2

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

Вы ввели бы фильтр службы $ в контроллере, а затем использовать его программно, как это:

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

Подробнее об этом фильтре можно найти here.

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

+0

Спасибо, это тоже помогло. – Axl

+0

приятное дополнение к другому ответу, спасибо – floribon