2014-05-02 3 views
1

J'essaye d'appliquer un filtre à un objet JSON sans trop de chance.Filtre AngularJS Objet JSON {} qui n'est pas un tableau d'objets

La structure de données est quelque chose comme ceci:

$scope.jsonObj = { 
    someid8979: { 
     name: "Bill", 
     age: 18 
    }, 
    someid987: { 
     name: "Ted", 
     age: 17 
    } 
} 

Dans mon HTML, quelque chose comme ceci:

<input ng-model="search"> 
<div ng-repeat="(key,val) in jsonObj | filter:search"> 
    {{key}} - {{val.name}} - {{val.age}} 
</div> 

Dans le passé, je l'ai toujours envoyé les données comme un tableau d'objets , et en effet, si je l'ai fait ici, cela fonctionnerait, mais en raison de la nature de l'application, ce n'est pas possible car je dois faire référence aux propriétés sur l'objet par son nom (l'identifiant) ailleurs dans le code.

Est-il possible d'appliquer un filtre à un objet JSON similaire à celui-ci?

Je pourrais créer un tableau séparé seulement à des fins de filtrage et de cibler l'objet JSON pour mes autres actions, mais je préfère ne pas :)

Edit: J'ai fait une copie de l'objet sous forme de tableau et en boucle sur cela, ce qui permet le filtrage. Cela résout mon problème, mais pas de la manière que j'avais espéré. Pourrait être assez bon.

+1

http://stackoverflow.com/questions/13887504/filtering-on-object-map-rather-than- array-in-angularjs – PSL

+0

Oui, comme je l'ai dit, cela peut être fait avec un tableau, je me demande si possible avec un objet. Merci quand même. – Jazzy

+1

https://github.com/angular/angular.js/blob/master/src/ng/filter/filter.js#L118 Donc 'filter' ne fonctionne qu'avec des tableaux. – dfsq

Répondre

0

Vous pouvez placer la fonction de comparaison dans votre contrôleur comme dans ce plunker:

http://plnkr.co/edit/n93RjIqLehVymmjjbTQd?p=preview

+0

Mon modèle n'est pas un tableau. Le filtre $ intégré attend un tableau. Je suis juste curieux s'il y a une solution qui peut utiliser un objet. Pas un tableau. {} contre. []. – Jazzy

Questions connexes