AngularJS | OrderBy не является массивом

Я хочу добавить возможность сортировки в столбец таблицы, но получаю такую ​​ошибку:

[orderBy:notarray] Expected array but received: 0

Кроме того, сортировка вообще не работает. В то время как стрелки вверх и вниз меняются местами, и отладчик, кажется, получает правильную информацию.

Мой HTML:

<th class = "text-center"><a style = "color:black"
    ng-click = "sortColumn('severity')">
    Level
    <span ng-show = "sortTable('severity')" class = "fa fa-caret-down"></span>
    <span ng-show = "sortTable('severity', false)" class = "fa fa-caret-up"> 
    </span>
    </a>
</th>
<th><a style = "color:black" ng-click = "sortColumn('getTimeAgo')">
    Timestamp
    <span ng-show = "sortTable('getTimeAgo')" class = "fa fa-caret-down"> 
    </span>
    <span ng-show = "sortTable('getTimeAgo', false)" class = "fa fa-caret-up"> 
    </span>
    </a>
</th>

<tbody ng-repeat = "t in Ctrl.notifications | filter : search | 
         filter : Ctrl.customFilter track by $index | 
         orderBy:sortingFn:sortReverse"
         ng-style = "$index != 0 ? 'border-top:0px' : ''">

CTRL:

  $scope.sortColumn = (sortBy) => {
    $scope.sortReverse = !$scope.sortReverse;
    $scope.sortBy = sortBy;
  };

  $scope.sortTable = (sortBy, sortReverse = true) =>
    $scope.sortBy === sortBy && $scope.sortReverse === sortReverse;

  $scope.sortAlerts = (alert, sortBy) => {
    switch (sortBy) {
      case 'severity':
        return alert.severity;
      case 'getTimeAgo':
        return alert.getTimeAgo;
      default:
        return alert[sortBy]
    }
  };

  $scope.sortingFn = (alert) => {
    return sortAlerts(alert, $scope.sortBy)
  };

попробуйте записать track by $indexпосле все ваши фильтры

Aleksey Solovey 05.11.2018 12:08

Убедитесь, что ваш массив содержит элементы

Prasad Telkikar 05.11.2018 12:08

Не работает. Я получаю это: Error: [$parse:syntax] Syntax Error: Token 'track' is an unexpected token at column 40 of the expression [$index | orderBy:sortingFn:sortReverse track by $index] starting at [track by $index].

user10104341 05.11.2018 12:11

@PrasadTelkikar. Похоже, что [sortBy] не определен. Какие-либо предложения?

user10104341 05.11.2018 12:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я просто изменил следующее:

  $scope.sortingFn = (alert) => {
    return sortAlerts(alert, $scope.sortBy)
  };

К

  const sortingFn = (alert) => {
    return sortAlerts(alert, $scope.sortBy)
  };

Теперь это работает. Никаких ошибок, ничего ... Спасибо за помощь, ребята !!

Вы должны изменить повторение на tr. Итак, эффект orderby на tr

<tr ng-repeat = "t in Ctrl.notifications | filter : search | 
         filter : Ctrl.customFilter track by $index | 
         orderBy:sortingFn:sortReverse">
    <td>{{t.xxx}}</td>
    <td>{{t.yyyy}}</td>
</tr>

Другие вопросы по теме