Angular ng-repeat orderПо нескольким полям как одно поле

Мой вопрос не совпадает с orderby по нескольким полям в Angular.

В моем массиве есть объекты, где у некоторых есть

{
  estimatedStartDate : "..."
}

а у некоторых есть:

{
  actualStartDate : "..."
}

Итак, есть ли способ заказать, рассматривая оба поля.

orderBy:['estimatedStartDate','actualStartDate'] 

^ Это не работает.

Вот скрипт: http://jsfiddle.net/g201tudg/1/

Итак, притворитесь, что оба эти поля одинаковы, а затем выполните сортировку?


person Sumama Waheed    schedule 17.05.2016    source источник


Ответы (5)


Добавьте такую ​​функцию в свой контроллер:

$scope.sortByEitherDate = function(row) {
    if (row.actualStartDate) {
        return row.actualStartDate;
    }
    return row.estimatedStartDate;
}

Затем закажите его с помощью orderBy: sortByEitherDate

рабочая скрипка: http://jsfiddle.net/g201tudg/4/

person Mike Feltman    schedule 17.05.2016
comment
При втором возврате вам не хватает row.. - person John Smith; 17.05.2016
comment
orderBy: sortByEitherDate вместо orderBy: 'sortByEitherDate' - person tpsilva; 17.05.2016

Вы можете написать свою собственную функцию заказа. Он будет принимать параметр — вашу карту — и возвращать любое из этих полей.

JS:

    $scope.sort = function(card) {
        return card.actualStartDate !== undefined ? card.actualStartDate : card.estimatedStartDate;
    }

HTML:

<div ng-repeat="card in myCards | orderBy:sort">...</div>
person John Smith    schedule 17.05.2016

https://stackoverflow.com/a/25116296/2474688
Попробуйте это и посмотрите, работает ли это. Просто просматривая эту ветку, похоже, что они сортируют на основе индекса с помощью специального фильтра.

person jsmtslch    schedule 17.05.2016

Вы можете использовать пользовательскую сортировку OrderBy :

<tr ng-repeat="contact in contacts | orderBy:randomSort"> 

$scope.randomSort = function(contact) {
  // your condition
};
person Kais    schedule 17.05.2016

По моему опыту, порядок Angular ngRepeat не любит неопределенные значения, поэтому добавление отсутствующих элементов в качестве null устраняет вашу проблему.

Кстати, "док" упоминать не нужно. Достаточно просто написать член.

Кроме того, написание собственного метода сортировки сильно потребляет ресурсы клиента.

Вот отредактированная скрипта, которая работает правильно: http://jsfiddle.net/g201tudg/ 2/

person Ahmad M. Sadeghi    schedule 17.05.2016
comment
спасибо, я удалил документ. , это было частью моего пользовательского кода. Ваша скрипка не работает. Я должен увидеть 1 2 3 4 5, так как B = 1, E = 2 и т. д. - person Sumama Waheed; 17.05.2016