Ce que j'essaie de faire, c'est de trier certaines données par propriété. Voici un exemple qui, selon moi, devrait fonctionner mais ce n'est pas le cas.
Partie 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>
Partie 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},
}
}]);
Et le résultat:
- A -> AData
- B -> BData
- C -> CData
... que IMHO devrait ressembler à ceci:
- C -> CData
- B -> BData
- A -> AData
Ai-je manqué quelque chose (voici JSFiddle prêt à expérimenter)?
la source
{1:'Example 1', 2:'Example 2', 3:'Example 3', ...}
for(var objectKey in input) { input[objectKey]['_key'] = objectKey; array.push(input[objectKey]); }
Comme ça on peut utiliser<div ng-repeat="value in object | orderObjectBy:'order'" ng-init="key = value['_key']">
... | orderBy: 'name'
.C'est assez facile, fais-le comme ça
la source
N'oubliez pas que parseInt () ne fonctionne que pour les valeurs Integer. Pour trier les valeurs de chaîne, vous devez permuter ceci:
avec ça:
la source
Comme vous pouvez le voir dans le code de angular-JS ( https://github.com/angular/angular.js/blob/master/src/ng/filter/orderBy.js ) ng-repeat ne fonctionne pas avec les objets. Voici un hack avec sortFunction.
http://jsfiddle.net/sunnycpp/qaK56/33/
la source
selon http://docs.angularjs.org/api/ng.filter:orderBy , orderBy trie un tableau. Dans votre cas, vous passez un objet, vous devrez donc implémenter votre propre fonction de tri.
ou passer un tableau -
jetez un œil à http://jsfiddle.net/qaK56/
la source
Vous devriez vraiment améliorer votre structure JSON pour résoudre votre problème:
Alors tu pourrais faire
Le problème, je pense, est que les variables (clé, valeur) ne sont pas disponibles pour le filtre orderBy, et vous ne devriez pas stocker de données dans vos clés de toute façon
la source
Voici ce que j'ai fait et cela fonctionne.
Je viens d'utiliser un objet stringifié.
<div ng-repeat="message in thread | orderBy : '-mostRecent.timeStamp'" >
si je voulais trier par texte, je le ferais
la source
J'ajouterai ma version améliorée du filtre capable de prendre en charge la syntaxe suivante:
Merci à Armin et Jason pour leurs réponses dans ce fil, et Alnitak dans ce fil .
la source
La réponse d'Armin + une vérification stricte des types d'objets et des clés non angulaires telles que
$resolve
la source
Ce qui suit permet de classer les objets par clé OU par clé dans un objet .
Dans le modèle, vous pouvez faire quelque chose comme:
Ou même:
Le filtre:
la source