我有一个包含对象数组的JSON提要。每个数组都有一个名为“status”的字段,其中包含以下值:是,否,不是,从不 我想为其分配一个订单号
所以
Yes(1) ,
Not Now(2),
No(3),
Never(4)
现在每当我对包含此状态的表进行排序时。 它必须按orderNo排序。状态而非按字母顺序排列。
我不需要完整的答案,只需指向正确的方向即可。
答案 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}进行排序}。