Tôi đã viết phần tiện dụng này để sắp xếp theo nhiều cột / thuộc tính của một đối tượng. Với mỗi lần nhấp cột liên tiếp, mã lưu trữ cột cuối cùng được nhấp và thêm nó vào danh sách ngày càng tăng của các tên chuỗi được nhấp, đặt chúng vào một mảng gọi là sortArray. Bộ lọc "orderBy" Angular tích hợp chỉ cần đọc danh sách sortArray và sắp xếp các cột theo thứ tự các tên cột được lưu trữ ở đó. Vì vậy, tên cột được nhấp cuối cùng trở thành bộ lọc theo thứ tự chính, cái trước được nhấp vào thứ tự ưu tiên, v.v ... Thứ tự ngược lại ảnh hưởng đến tất cả các thứ tự cột cùng một lúc và tăng dần / giảm dần cho bộ danh sách mảng hoàn chỉnh:
<script>
app.controller('myCtrl', function ($scope) {
$scope.sortArray = ['name'];
$scope.sortReverse1 = false;
$scope.searchProperty1 = '';
$scope.addSort = function (x) {
if ($scope.sortArray.indexOf(x) === -1) {
$scope.sortArray.splice(0,0,x);//add to front
}
else {
$scope.sortArray.splice($scope.sortArray.indexOf(x), 1, x);//remove
$scope.sortArray.splice(0, 0, x);//add to front again
}
};
$scope.sushi = [
{ name: 'Cali Roll', fish: 'Crab', tastiness: 2 },
{ name: 'Philly', fish: 'Tuna', tastiness: 2 },
{ name: 'Tiger', fish: 'Eel', tastiness: 7 },
{ name: 'Rainbow', fish: 'Variety', tastiness: 6 },
{ name: 'Salmon', fish: 'Misc', tastiness: 2 }
];
});
</script>
<table style="border: 2px solid #000;">
<thead>
<tr>
<td><a href="#" ng-click="addSort('name');sortReverse1=!sortReverse1">NAME<span ng-show="sortReverse1==false">▼</span><span ng-show="sortReverse1==true">▲</span></a></td>
<td><a href="#" ng-click="addSort('fish');sortReverse1=!sortReverse1">FISH<span ng-show="sortReverse1==false">▼</span><span ng-show="sortReverse1==true">▲</span></a></td>
<td><a href="#" ng-click="addSort('tastiness');sortReverse1=!sortReverse1">TASTINESS<span ng-show="sortReverse1==false">▼</span><span ng-show="sortReverse1==true">▲</span></a></td>
</tr>
</thead>
<tbody>
<tr ng-repeat="s in sushi | orderBy:sortArray:sortReverse1 | filter:searchProperty1">
<td>{{ s.name }}</td>
<td>{{ s.fish }}</td>
<td>{{ s.tastiness }}</td>
</tr>
</tbody>
</table>
orderBy:['-group','sub']
để sắp xếp theogroup
thứ tự ngược lại.