orderby multiple angularjs angularjs-orderby

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''"

DEMO