Angular ng-repeat指令按多个字段排序作为一个字段

3
我的问题与在Angular中orderBy多个字段不同。我的数组包含对象,其中一些对象有以下属性:
{
  estimatedStartDate : "..."
}

有些人有:

{
  actualStartDate : "..."
}

那么有没有一种方式可以同时考虑这两个字段进行orderBy呢?
orderBy:['estimatedStartDate','actualStartDate'] 

^ 这个不起作用。

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

所以假设这两个字段是相同的,然后进行排序?

5个回答

3
将以下函数添加到您的控制器中:

function addFunction(){}

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

使用 orderBy:sortByEitherDate 进行排序:

有效的示例:http://jsfiddle.net/g201tudg/4/


1
在第二个返回中,你漏掉了一个 row. - John Smith
1
orderBy:sortByEitherDate 而不是 orderBy:'sortByEitherDate' - tpsilva

1
你可以编写自己的自定义排序函数。它将接受一个参数 - 你的卡片 - 并返回其中任意一个字段。 JS:
    $scope.sort = function(card) {
        return card.actualStartDate !== undefined ? card.actualStartDate : card.estimatedStartDate;
    }

HTML:

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

0

0
根据我的经验,Angular ngRepeat顺序不喜欢未定义的值,因此将缺少的成员添加为null可以解决您的问题。
顺便说一下,您不需要提到“doc”。只写成员就足够了。
此外,编写自定义排序方法会消耗大量客户端资源。
这是已编辑的fiddle,可以正常工作:http://jsfiddle.net/g201tudg/2/

谢谢,我已经删除了文档,那是我的自定义代码的一部分。你的fiddle不起作用。我应该看到1 2 3 4 5,因为B = 1,E = 2等等。 - Sumama Waheed

0

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接