OrderBy不适用于ng-repeat中的多个属性

时间:2015-10-14 10:33:54

标签: html angularjs

我有这张桌子。我想按日期(日,月)排序。我可以在使用以下代码的那天排序,但我无法按orderBy:['day','month']对日期和月份进行排序。因此它显示在2015年7月8日之前的2015年6月9日。可以给我线索有什么不对吗?

<h1>Reservations</h1>

<table class="table">
    <thead>
        <tr>
            <th ng-repeat="heading in data1.headings">{{heading}}</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="reservation in reservations|orderBy:'day'" ng-show="reservation.is_approved">
            <td>{{reservation.id}}</td>
            <td>{{reservation.user.fb_id}}</td>
            <td>{{reservation.user.name}}</td>
            <td>{{reservation.user.phone}}</td>
            <td>{{reservation.user.email}}</td>
            <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
        </tr>
    </tbody>
</table>

3 个答案:

答案 0 :(得分:0)

您需要将日期转换为Javascript Date对象,然后才能进行正确的排序。

所以在您的控制器中执行:(更新您的需求)

2032.95

您可以使用many formats创建Javascript日期对象。

之后,您应该能够按日期排序。

reservations[i].date = new Date(year, month, day);

答案 1 :(得分:0)

这是因为orderBy不知道注入日期。它只是按数字排序。您应该添加到应用过滤器以解析数据以更正日期并对数组进行排序:

app.filter('filterByDate', function filterByDate() {
  return function(array, descending) {
    var order = descending ? 1 : -1;

    array.sort(function(a, b) {
      return (new Date(b.year, b.month, b.day) - new Date(a.year, a.month, a.day)) * order;
    });

    return array;
  };
});

并使用它:

<tr ng-repeat="reservation in reservations|filterByDate" ng-show="reservation.is_approved">
    <td>{{reservation.id}}</td>
    <td>{{reservation.user.fb_id}}</td>
    <td>{{reservation.user.name}}</td>
    <td>{{reservation.user.phone}}</td>
    <td>{{reservation.user.email}}</td>
    <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
</tr>

或者如果您想通过降序添加参数“true”来对日期进行排序:

<tr ng-repeat="reservation in reservations|filterByDate:true" ng-show="reservation.is_approved">
    <td>{{reservation.id}}</td>
    <td>{{reservation.user.fb_id}}</td>
    <td>{{reservation.user.name}}</td>
    <td>{{reservation.user.phone}}</td>
    <td>{{reservation.user.email}}</td>
    <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
</tr>

答案 2 :(得分:0)

默认顺序使用升序排序,你可以使用['day',' - month']按月降序排序 https://docs.angularjs.org/api/ng/filter/orderBy