Angularjs ng-repeat with orderby

时间:2015-01-13 22:59:18

标签: angularjs angularjs-orderby

我想使用ng-repeat以asc顺序呈现数组对象。下面是一个数组对象。

$scope.Stepdetails=[{
        [{
             RequestId: 2024,
         name:aa
        }]
      },
      {
       [{
             RequestId: 2025,
       name:aa
        }]
      },
      {
       [{
             RequestId: 2023,
        }]
      }]

  <td ng-repeat="Steps in Stepdetails ">   

      <div ng-repeat="step in Steps| orderBy: 'Steps.step.RequestId'">
       </div>
   </td>

3 个答案:

答案 0 :(得分:1)

您正在尝试访问数组元素,但您的结构是一个对象,请尝试更改结构,例如:

$scope.Stepdetails=[    // Steps

        [{              // Step
         name:aa,
             RequestId: 2024,
        }]
      ,

        [{
         name:aa,
             RequestId: 2025,
        }]
      ,
        [{
         name:aa
             RequestId: 2023,
        }]
      ]

答案 1 :(得分:0)

您无法使用内置的orderBy过滤器来订购此类对象。在我进入之前,你的对象看起来不正确。它应该是这样的:

$scope.Stepdetails =[{name: aa, RequestId: 2024},
                     {name: aa, RequestId: 2025},
                     {name: aa, RequestId: 2023}]

回到过滤,您需要构建自己的过滤器来对复杂对象进行排序。这个网站有一个非常好的即插即用的解决方案:

http://justinklemm.com/angularjs-filter-ordering-objects-ngrepeat/

答案 2 :(得分:0)

这似乎非常可行,但你的对象需要一些工作。 @nairys的对象是正确的:

$scope.Stepdetails = [
    { name: "aa", RequestId: 2024},
    { name: "aa", RequestId: 2025},
    { name: "aa", RequestId: 2023}
];

您需要做的只是传递RequestId,因为name是相同的(在您的示例中)。

考虑一下:

<div ng-controller="StepController">
    <div ng-repeat="step in Stepdetails | orderBy: 'RequestId'">
        {{ step.name }}, {{ step.RequestId}}
    </div>
</div>

角度订单自动按升序排列。要按降序排序,只需在所需的媒体前添加-即可。 orderBy: '-RequestId'

这是一个简单的订购解决方案,但它不适用于多维数组。但是,如果您只想订购一个简单的对象数组,那么这将有效。