Lo que estoy tratando de hacer es ordenar algunos datos por propiedad. Aquí hay un ejemplo que debería funcionar, pero no funciona.
Parte HTML:
<div ng-app='myApp'>
<div ng-controller="controller">
<ul>
<li ng-repeat="(key, value) in testData | orderBy:'value.order'">
{{value.order}}. {{key}} -> {{value.name}}
</li>
</ul>
</div>
</div>
Parte JS:
var myApp = angular.module('myApp', []);
myApp.controller('controller', ['$scope', function ($scope) {
$scope.testData = {
C: {name:"CData", order: 1},
B: {name:"BData", order: 2},
A: {name:"AData", order: 3},
}
}]);
Y el resultado:
- A -> AData
- B -> BData
- C -> CData
... que en mi humilde opinión debería verse así:
- C -> CData
- B -> BData
- A -> AData
¿Me perdí algo (aquí está JSFiddle listo para experimentar)?
fuente
{1:'Example 1', 2:'Example 2', 3:'Example 3', ...}
for(var objectKey in input) { input[objectKey]['_key'] = objectKey; array.push(input[objectKey]); }
así podemos usar<div ng-repeat="value in object | orderObjectBy:'order'" ng-init="key = value['_key']">
... | orderBy: 'name'
.Es bastante fácil, hazlo así
fuente
No olvide que parseInt () solo funciona para valores enteros. Para ordenar los valores de cadena, debe intercambiar esto:
con este:
fuente
Como puede ver en el código de angular-JS ( https://github.com/angular/angular.js/blob/master/src/ng/filter/orderBy.js ) ng-repeat no funciona con objetos. Aquí hay un truco con sortFunction.
http://jsfiddle.net/sunnycpp/qaK56/33/
fuente
de acuerdo con http://docs.angularjs.org/api/ng.filter:orderBy , orderBy ordena una matriz. En su caso, está pasando un objeto, por lo que tendrá que implementar su propia función de clasificación.
o pasar una matriz -
echa un vistazo a http://jsfiddle.net/qaK56/
fuente
Realmente debería mejorar su estructura JSON para solucionar su problema:
Entonces podrías hacer
El problema, creo, es que las variables (clave, valor) no están disponibles para el filtro orderBy, y de todos modos no debería almacenar datos en sus claves
fuente
Esto es lo que hice y funciona.
Solo utilicé un objeto en cadena.
<div ng-repeat="message in thread | orderBy : '-mostRecent.timeStamp'" >
si quisiera ordenar por texto lo haría
fuente
Agregaré mi versión mejorada del filtro que admita la siguiente sintaxis:
Gracias a Armin y Jason por sus respuestas en este hilo, y a Alnitak en este hilo .
fuente
La respuesta de Armin + una verificación estricta de tipos de objetos y claves no angulares como
$resolve
fuente
Lo siguiente permite ordenar los objetos por clave O por clave dentro de un objeto .
En la plantilla puedes hacer algo como:
O incluso:
El filtro:
fuente