angularjs - multiple - order by angular 6
Orden personalizado usando orderBy en ng-repeat (3)
Tengo objetos como este:
students = {name: ''Aa_Student'', class: ''A_Class''},
{name: ''Ab_Student'', class: ''A_Class''},
{name: ''Ac_Student'', class: ''B_Class''},
{name: ''Ba_Student'', class: ''B_Class''},
{name: ''Bb_Student'', class: ''C_Class''},
{name: ''Bc_Student'', class: ''C_Class''}
Digamos que el objeto de los estudiantes se baraja. Yo uso ng-repeat para mostrar los datos. Quiero ordenar los objetos en el orden personalizado.
Por ejemplo, quiero mostrar los datos de esta manera:
Name Class
-----------------------------
Ac_Student B_Class
Ba_Student B_Class
Aa_Student A_Class
Ab_Student A_Class
Bb_Student C_Class
Bc_Student C_Class
Básicamente, quiero ordenar por clase de estudiante, pero B_Class es lo primero, luego A_Class y luego C_Class. Además, quiero ordenar por nombre de los alumnos en orden alfabético. ¿Cómo puedo hacer esto?
HTML:
<table>
<tr ng-repeat="student in students | orderBy:customOrder">
...
</tr>
</table>
Controlador:
$scope.customOrder = function(student) {
$scope.students = $filter(''orderBy'')(student, function() {
});
};
Hola, puede crear un filtro de orden personalizado, consulte aquí http://jsbin.com/lizesuli/1/edit
html:
<p ng-repeat="s in students |customSorter:''class''">{{s.name}} - {{s.class}} </p>
</div>
filtro angularjs:
app.filter(''customSorter'', function() {
function CustomOrder(item) {
switch(item) {
case ''A_Class'':
return 2;
case ''B_Class'':
return 1;
case ''C_Class'':
return 3;
}
}
return function(items, field) {
var filtered = [];
angular.forEach(items, function(item) {
filtered.push(item);
});
filtered.sort(function (a, b) {
return (CustomOrder(a.class) > CustomOrder(b.class) ? 1 : -1);
});
return filtered;
};
});
Sé que esto es viejo pero puede ser útil para otros ...
También puede crear una función de clasificación personalizada simple. "No es un filtro":
$scope.customOrder = function (item) {
switch (item) {
case ''A_Class'':
return 2;
case ''B_Class'':
return 1;
case ''C_Class'':
return 3;
}
};
Y luego usa como quisieras:
<table>
<tr ng-repeat="student in students | orderBy:customOrder">
...
</tr>
para establecer el orderBy
como una propiedad de los objetos, simplemente cite ese nombre de propiedad dentro del marcado:
ng-repeat="student in students |orderBy:''name'' | orderBy:''class''"