0

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

所以

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

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

我不需要完整的答案,只需指向正确的方向就足够了。

4

2 回答 2

1

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

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

$http您可以在or服务的回调中处理它,$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;
});
于 2013-12-30T18:27:21.787 回答
0

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

$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,它将使用您的自定义排序方法。

我会将您链接到文档,尽管除非您阅读整篇文章,否则您可以做到这一点并不明显。但是您可以看到它orderBy接受一个表达式,它可以是您自己的函数(或函数数组),您可以在其中返回您自己的自定义值,该值将使用<and进行排序>

于 2013-12-30T18:37:51.217 回答