AngularJs ng-repeat多个orderBy和条件

时间:2017-03-02 06:36:35

标签: javascript angularjs sorting

我有一份包含就业历史的数据。我的就业日期有两个字段:

yearTo, monthTo

我需要根据最近的就业日期正确地对就业历史进行排序。

<tr id="employment_history_" ng-repeat="history in candidate.employmentHistory | orderBy : ['-yearTo','monthTo',] | date:['YYYY', 'MMM'] ">

它正常工作。但我有一个问题。字段monthTo还可以包含值Present,而不仅仅包含MMM等月份日期格式JAN, FEB MAR

问我如何对此进行排序,我知道我的格式为date,但我想将monthToPresent的记录放在首位?

1 个答案:

答案 0 :(得分:1)

所以这个JSFiddle可以帮助你朝着正确的方向前进:JSFiddle

这种方式的工作方式是因为您可以为orderBy指令提供一个谓词数组,就像您在提供的示例中所做的那样。在您的示例中,您只使用字符串谓词,而您也可以使用函数谓词。函数谓词将接收您尝试订购的项目,您可以选择要返回的项目,因此angular可以使用该值来订购该值。

ng-repeat="hist in main.history | orderBy: ['-yearTo', main.orderMonthTo]"

this.orderMonthTo = function(item) {
    if (item.monthTo === 'Present') {
    return -13;
  } else {
    return Number(moment(item.monthTo, 'MMM').format('M'))*-1;
  }
}

可以找到有关此here的更多信息。 此外,在JSFiddle中,我使用momentjs库来更轻松地处理日期。