Filtre Angularjs sur la propriété imbriquée
-
21-12-2019 - |
Question
J'ai un tableau de l'objet json suivant :
{
fooBar:{
Id: 2
Foo: {
Id: 4
IsNew: false
}
Bar: {
Id: 1
IsNew: false
}
}
}
et je veux filtrer sur le fooBar.Foo.Id
, donc basé sur cette réponse Je m'attendais à ce que ce qui suit fonctionne :
<div data-ng-repeat="fooBar in fooBars | filter:{Foo:{Id : 4}}:true">
Mais cela ne me rapporte rien.
Je peux cependant faire ce qui suit pour filtrer sur fooBar.Id et cela fonctionne très bien :
<div data-ng-repeat="fooBar in fooBars | filter:{Id : 2}:true">
Dois-je écrire des filtres personnalisés pour ce type de correspondance de propriétés enfants d'un niveau inférieur ?Ou y a-t-il quelque chose d'évident que je fais mal ?
La solution
Basé sur cette réponse, j'ai résolu le problème en créant un filtre personnalisé :
app.filter('fooBarFilter', [function () {
return function (foobars, fooId) {
var result = {};
angular.forEach(foobars, function (foobar, key) {
if (foobar.foo.Id === fooId) {
result[key] = foobar;
}
});
return result;
};
}]);
et je l'ai utilisé pour filtrer la collection dans le HTML :
<div data-ng-repeat="(key, fooBar) in fooBars | fooBarFilter : 4">
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow