Angular ng-repeat orderBy multiple fields as one field

Angular ng-repeat orderBy multiple fields as one field

我的问题与orderBy multiple fields in Angular不同。

我的数组有对象,而有些对象有

{
  estimatedStartDate : "..."
}

有些人有:

{
  actualStartDate : "..."
}

那么有没有一种方法可以同时考虑这两个字段。

orderBy:['estimatedStartDate','actualStartDate'] 

^ 这行不通。

这是一个fiddle:http://jsfiddle.net/g201tudg/1/

所以假设这两个字段相同然后排序?

将这样的功能添加到您的控制器:

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

然后按 orderBy:sortByEitherDate

订购

工作fiddle:http://jsfiddle.net/g201tudg/4/


试试这个,看看它是否有效。只是通过这个线程,看起来他们正在通过自定义过滤器根据索引进行排序。

您可以使用自定义 OrderBy 排序:

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

$scope.randomSort = function(contact) {
  // your condition
};

您可以编写自己的自定义订单功能。它需要一个参数 - 你的卡 - 和 return 这些字段中的任何一个。

JS:

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

HTML:

<div ng-repeat="card in myCards | orderBy:sort">...</div>

根据我的经验,Angular ngRepeat order 不喜欢未定义的值,因此将缺少的成员添加为 null 可以解决您的问题。

对了,不用提"doc"。写成员就够了

另外,写自定义的排序方法,对客户端资源消耗很大

这是编辑后的 ​​fiddle,它可以正常工作:http://jsfiddle.net/g201tudg/2/