0

В настоящее время у меня нет возможности сортировать столбцы моего списка, используя orderBy -filter. Проблема в том, что у меня есть вложенный ngRepeat.Сортировка столбцов в вложенных ng-repeat (AngularJS)

Вид:

<md-list> 
     <md-list-item> 
      <span ng-repeat="item in ::hItems track by $index" ng-click="sortBy(item)" flex> 
       {{ ::item }} 
      </span> 
     </md-list-item> 
     <md-divider></md-divider> 
     <md-list-item ng-repeat="cItem in ::cItems | orderBy:sortType:sortReverse track by $index"> 
      <span ng-repeat="(key, value) in ::cItem track by $index" flex> 
       {{ ::value }} 
      </span> 
      <md-divider></md-divider> 
     </md-list-item> 
</md-list> 

Как только пользователь нажмет на заголовке столбца функция sortBy будет вызываться. Функция реализована в контроллере следующим образом:

//Default values: 
$scope.sortType = 'NAME'; 
$scope.sortReverse = false; 
var orderBy = $filter('orderBy'); 

//sortBy func: 
function sortBy(columnKey) { 
    $scope.sortType = columnKey; 
    $scope.sortReverse = !$scope.sortReverse; 
    $scope.cItems = orderBy($scope.cItems, $scope.sortType, $scope.sortReverse); 
} 

список сортирует только по значению по умолчанию name. Вот выходной массив GET-запрос:

//JSON data 
[ 
    { 
     "ArtNo": "DE123", 
     "SHORTCODE": "ABC", 
     "NAME": "article one", 
     "QUANTITY": 3, 
     "GROUPID": 1, 
     "ACTIVE": 1 
    },... 
] 

Таким образом, мне нужна вложенная ngRepeat потому, как вы можете видеть массив определяются с ключевыми числами и значениями объекта =>[0:Object, 1:Object...]. Мне нужно только решение для моей функции sortBy. У кого-нибудь есть идея?

Ниже мой список вывода:

ArtNo | SHORTCODE | NAME   | QUANTITY 
DE123 | ABC001 | article one | 3 
DE456 | ABC002 | article two | 8 
DE789 | ABC003 | article three | 4 
DE321 | ABC004 | article four | 13 
.... 
+1

Пожалуйста, упростите свой код вопроса и обеспечите рабочий скрипт ... –

+0

@EliasSoares Что вы не понимаете в моем коде? Затем я могу отредактировать мою тему. – yuro

+0

Что такое 'md-list',' md-list-item', 'md-divider'? Я знаю, что это может не повлиять на проблему, но когда вы предоставляете наименьший код, который возникает в этой ситуации, вам легко и (или) найти проблему. –

ответ

1

Если я понял правильно, то такое поведение:

  • пользователя нажмите на нужной колонке для сортировки, а содержимое таблицы будут упорядочены по эта колонка.
  • Пользователь повторно щелкнет и направление сортировки инвертируется.

Справа?

Итак, почему вы заказываете дважды свой массив?

//Default values: 
$scope.sortType = 'NAME'; 
$scope.sortReverse = false; 
var orderBy = $filter('orderBy'); 

//sortBy func: 
function sortBy(columnKey) { 
    $scope.sortType = columnKey; 
    $scope.sortReverse = !$scope.sortReverse; 
    // You do not need to order anything here. Just define your orderby parameters here to be used on view. 
} 

Real решение

В разговоре с вопросом автором, мы не нашли главную проблему здесь:

Использование :: синтаксиса на ng-repeat избегает углового наблюдая изменения на OrderBy фильтра, поэтому изменение не отразились на взгляде.

+0

Я проголосовал за ваш ответ. Думаю, это помогает мне :) – yuro

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

  • Нет связанных вопросов^_^