如何以角度编码自定义排序功能?

时间:2014-09-10 21:13:15

标签: angularjs angularjs-orderby

<div class="item" data-ng-repeat="course in courses | filter:filterCourses | orderBy:predicate">...

$scope.predicate = function(course) {
    //$scope.orderProp
};

我需要将哪些代码放在谓词中,以便

  1. 以与默认orderBy:谓词订购相同的方式订购(不确定这是否合理)
  2. 在列表末尾放置空课程.StartDate
  3. 注意:

    • 当然是一个具有不同属性的Object,例如title,startDate, 代码
    • $ scope.orderProp包含要排序的值:title,startDate, 码。当startDate为空时,我想将这些项目放在 列表的结尾,但仍然按日期排序,开始 date是一个“整数”,我稍后会以更好的形式显示ng-date

    谢谢

    答案: 这就是我最终的结果 http://jsfiddle.net/3hz2j8j7/

2 个答案:

答案 0 :(得分:2)

OrderBy可以接受谓词列表(有点像说“按A排序,然后是B”)。因此,您的第一个谓词将确保空白开始日期结束,第二个谓词将使用orderProp的值:

<div ... orderBy:[nonEmptyStartDate, orderProp]">

$scope.nonEmptyStartDate = function(course) {
    return course.startDate=="" ? 1 : 0;
}

答案 1 :(得分:1)

除了康斯坦丁诺斯的回答,我还为您提供了jsfiddle的确切数据。 所有的角色魔法都在

<div ng-repeat="course in courses|orderBy:[nonEmptyStartDate,orderProp]:true">

其中orderProp ='title',以便第一个数据先按非空日期排序,然后按标题排序。 请告诉我们。