传递还原为orderBy数组

时间:2014-09-17 07:46:27

标签: angularjs angularjs-ng-repeat

我有以下代码:

jade(html)

ng-repeat="message in messageList | orderBy: [sortingByIsUnread, sortingBySentDate]

的javascript

$scope.sortingBySentDate = function (message) () {
        return moment(message.sentDate).format('X')
}

$scope.sortingByIsUnread = function (message) () {
        return message.read
}

以上代码有效。但是当将数组传递给orderBy时,是否可以为特定的排序方法指定顺序? (sortingBySentDate - >顶部的新日期)

2 个答案:

答案 0 :(得分:1)

基本上,排序函数将复杂对象映射到一些简单的值;这些映射值将在稍后对这些对象的集合进行排序时进行比较。基本上,如果a对象的映射值小于b对象的映射值,则前者首先出现。

由于您基本上比较时间戳(moment(message.sentDate).format('X')的结果),因此很容易恢复其排序 - 只需使用unary minus操作取消值,如下所示:

$scope.reversedSortingBySentDate = function(message) {
    return -moment(message.sentDate).format('X');
}

这是有效的,因为对于每个常规的&#39; (非NaN)编号ab,如果a < b为真,那么-a > -b也是如此。

答案 1 :(得分:0)

当然,添加一个&#39; - &#39;扭转排序:

ng-repeat="message in messageList | orderBy: ['isUnread', '-sentDate']

其中isUnread和sentDate是消息的属性。