假设我有一系列像这样的对象:
[
{
name: 'test1',
status: 'pending',
date: 'Jan 17 2017 21:00:23'
},
{
name: 'test2',
status: 'pending',
date: 'Jan 14 2017 21:00:23'
},
{
name: 'test3',
status: 'active',
date: 'Jan 10 2017 21:00:23'
}
];
我首先要根据" status"进行排序。所有项目都在"待定"在[" active"之前)应该来到(我还有其他状态,所以orderBy名称DESC无法工作。)
后来我想根据日期降序来重新定位它们。
在我的角度脚本中,我有一个定义为sortField的变量:
$scope.sortField = ['status', '-date'];
(不起作用,因为Active在Pending之前排序)
我的html中有这个:
<li ng-repeat="form in forms | orderBy:sortField:isAsc " class="row {{Contextual}}" style="margin-bottom: 2px;">
...
</li>
我一直在尝试在线搜索但无法到达任何地方。你如何自定义一个字段&#34; status&#34;正常排序另一个&#34;日期&#34;?
答案 0 :(得分:0)
orderBy
过滤器使用表达式来计算顺序。您可以将字符串或函数作为表达式传递。此外,您可以将数组作为表达式传递,并且数组可以包含字符串/函数谓词。
也就是说,您可以定义自定义排序函数并传入数组:
<li ng-repeat="form in forms | orderBy: [statusOrder, '-date']">
控制器:
$scope.statusOrder = function(item) {
if (item.status === 'pending') {
return 1; // smaller value means this should be placed first
} else {
return 2; // all other statuses not 'pending' should be returned as is
}
}
修改强>
关于日期顺序不正确,Angular按字母顺序对日期进行排序,因为日期是字符串。您有两种选择:
更新数组源,使日期字符串成为日期对象。这是更有效的范围明智。
angular.forEach($scope.array, function(item) {
item.date = new Date(item.date)
})
像处理状态一样创建自定义dateSort函数。该功能应该只是return new Date(item.date)