订单AngularJS中的订单号

时间:2013-12-30 18:17:50

标签: angularjs angularjs-orderby

我有一个包含对象数组的JSON提要。每个数组都有一个名为“status”的字段,其中包含以下值:是,否,不是,从不 我想为其分配一个订单号

所以

Yes(1) , 
Not Now(2), 
No(3), 
Never(4)

现在每当我对包含此状态的表进行排序时。 它必须按orderNo排序。状态而非按字母顺序排列。

我不需要完整的答案,只需指向正确的方向即可。

2 个答案:

答案 0 :(得分:1)

您可以向每个对象添加一个名为orderNo的字段,并使用您从API检索值后定义的顺序填充此值。

[
    {
        "status": "Yes",
        "orderNo": 1,
        ....
    },
    {
        "status": "Never",
        "orderNo": 4,
        ....
    }
]

您可以在$http$resource服务的回调中处理它,如下所示:

angular.forEach(objects, function(o){
    if(o.status === 'Yes') o.orderNo = 1;
    else if(o.status === 'Not Now') o.orderNo = 2;
    else if(o.status === 'No') o.orderNo = 3;
    else if(o.status === 'Never') o.orderNo = 4;
});

答案 1 :(得分:0)

如果无法修复后端,那么您需要做的就是编写一个用于角度的排序函数。在您的情况下,在角度控制器中,写下

$scope.myCustomSort = function(elem)
{
  switch(elem.status)
  {
    case "Yes": return 1;
    case "Not now": return 2;
    case "No": return 3;
    case "Never": return 4;
    default: return 10;
  }
}

然后,在您的HTML中,将其作为orderBy函数传递。

<myThing ng-repeat="item in items | orderBy:myCustomSort"></myThing>

只要myCustomSort方法适用于控制ng-repeat的人的范围,它就会使用您的自定义排序方法。

link you to the doc,但除非你读完整件事,否则你不能做到这一点并不明显。但是您可以看到orderBy接受一个表达式,它可以是您自己的函数(或函数数组),您可以在其中返回自己的自定义值,该值将使用<和{{1}进行排序}。