Ich habe dieses praktische Stück geschrieben, um nach mehreren Spalten / Eigenschaften eines Objekts zu sortieren. Bei jedem nachfolgenden Klick auf eine Spalte speichert der Code die zuletzt geklickte Spalte und fügt sie einer wachsenden Liste von geklickten Spaltennamen hinzu, die in einem Array namens sortArray platziert werden. Der integrierte Angular "orderBy" Filter liest einfach die sortArray-Liste und ordnet die Spalten gemäß der darin gespeicherten Reihenfolge der Spaltennamen. Der zuletzt geklickte Spaltenname wird zum primären sortierten Filter, der zuvor geklickte wird der nächste in der Präzedenz usw. Die umgekehrte Reihenfolge beeinflusst die Reihenfolge aller Spalten auf einmal und schaltet aufsteigende / absteigende Reihenfolge für die vollständige Array-Liste um:
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 }
];
});
NAME▼▲
FISH▼▲
TASTINESS▼▲
{{ s.name }}
{{ s.fish }}
{{ s.tastiness }}