如何通过使用多个字段在同一时间排序在角?首先按组,然后按子组
例如
$scope.divisions = [{'group':1,'sub':1}, {'group':2,'sub':10}, {'group':1,'sub':2},{'group':1,'sub':20},{'group':2,'sub':1},
{'group':2,'sub':11}];
我想把它显示为
组:子组
1-1
1-2
1-20
2-1
2-10
2-11
<select ng-model="divs" ng-options="(d.group+' - '+d.sub) for d in divisions | orderBy:'group' | orderBy:'sub'" />
创建用于排序的管道。接受字符串和字符串数组,按多个值排序。适用于Angular(而不是AngularJS)。支持字符串和数字排序。
@Pipe({name: 'orderBy'})
export class OrderBy implements PipeTransform {
transform(array: any[], filter: any): any[] {
if(typeof filter === 'string') {
return this.sortAray(array, filter)
} else {
for (var i = filter.length -1; i >= 0; i--) {
array = this.sortAray(array, filter[i]);
}
return array;
}
}
private sortAray(array, field) {
return array.sort((a, b) => {
if(typeof a[field] !== 'string') {
a[field] !== b[field] ? a[field] < b[field] ? -1 : 1 : 0
} else {
a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0
}
});
}
}
AngularJs有两种过滤器,一种在HTML中使用{{}},另一种在实际的JS文件中…
你可以使用以下方法来解决你的问题:
{{ Expression | orderBy : expression : reverse}}
如果你在HTML中使用它或使用类似的东西:
$filter('orderBy')(yourArray, yourExpression, reverse)
reverse在末尾是可选的,它接受一个布尔值,如果它为真,它将为你反转数组,非常方便地反转你的数组…
排序可以通过在angular中使用'orderBy'过滤器来完成。
两种方式:
1. 从视图
2. 从控制器
从视图
语法:
{{array | orderBy : expression : reverse}}
例如:
<div ng-repeat="user in users | orderBy : ['name', 'age'] : true">{{user.name}}</div>
从控制器
语法:
$filter.orderBy(array, expression, reverse);
例如:
$scope.filteredArray = $filter.orderBy($scope.users, ['name', 'age'], true);