【问题标题】:angular orderBy in ng-repeat not workingng-repeat 中的 angular orderBy 不起作用
【发布时间】:2014-09-09 07:45:40
【问题描述】:

找不到与我的问题匹配的任何现有问题...

OrderBy 不适合我;我归结为以下示例代码:

控制器:

'use strict';

angular.module('angularSampleApp')
.controller('MainCtrl', function($scope) {

    $scope.products = [{
        product_summary: {
            purchase_id: 225,
            purchase_date: '2014-09-05T08:58:59+10:00',
            title: 'Product 1',
        }
    }, {
        product_summary: {
            purchase_id: 226,
            purchase_date: '2014-09-05T11:34:28+10:00',
            title: 'Product 2',
        }
    }];

    $scope.purchaseDate = function(product) {
      return Date.parse(product.product_summary.purchase_date);
    }

});

并查看:

<ul>
  <li ng-repeat="product in products | orderBy:purchaseDate">
  {{product.product_summary.title}} : {{product.product_summary.purchase_date}}
</ul>

<ul>
  <li ng-repeat="product in products | orderBy:purchaseDate:reverse">
  {{product.product_summary.title}} : {{product.product_summary.purchase_date}}
</ul>

两个列表的顺序相同。

据我所见,我做事正确 - purchaseDate 函数返回 Date.parse 输出,它是一个 int,据我所见,这应该可以工作......

谁能看出我做错了什么?

【问题讨论】:

    标签: angularjs ng-repeat angularjs-orderby


    【解决方案1】:

    反向 (可选的) 布尔值 颠倒数组的顺序。

    https://docs.angularjs.org/api/ng/filter/orderBy

    reverse 是一个变量,需要设置为 true 或 false。如果你使用一个未定义的变量,它是“假的”,所以它的行为就像你没有告诉它反转一样。添加$scope.reverse = true 即可。

    编辑:实际上,您可能需要这样做:

    orderBy:'productSummary.purchaseDate':reverse 
    

    也可以按购买日期订购

    【讨论】:

    • 谢谢!我自己也做了同样的事情!它的购买日期条款 - 我创建了一个函数来解析日期并返回纪元。我现在检查一下 product_summary.purchase_date 是否也有效。
    • 原来它无法对 ISO86012 格式的字符串日期进行排序。所以留在函数中转换为epoch。
    【解决方案2】:

    好的,我刚刚意识到orderBy的第二个参数不是'reverse',它是真反转,假不反转。

    应该正确阅读文档......

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 2014-07-18
      • 2016-02-24
      • 2013-10-23
      • 2016-12-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多