À l'intérieur de ma manette, je voudrais filtrer un tableau d'objets. Chacun de ces objets est une carte qui peut contenir des chaînes ainsi que des listes
J'ai essayé d'utiliser le $filter('filter')(array, function)
format mais je ne sais pas comment accéder aux éléments individuels du tableau dans ma fonction. Voici un extrait pour montrer ce que je veux.
$filter('filter')(array, function() {
return criteriaMatch(item, criteria);
});
Et puis dans le criteriaMatch()
, je vérifierai si chacune des propriétés individuelles correspond
var criteriaMatch = function(item, criteria) {
// go thro each individual property in the item and criteria
// and check if they are equal
}
Je dois faire tout cela dans le contrôleur et compiler une liste de listes et les définir dans la portée. J'ai donc besoin d'accéder $filter('filter')
uniquement de cette manière. Tous les exemples que j'ai trouvés sur le net jusqu'à présent ont des recherches de critères statiques dans la fonction, ils ne passent pas un objet de critères et ne testent pas chaque élément du tableau.
la source
Réponses:
Vous pouvez l'utiliser comme ceci: http://plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p=preview
Comme vous l'avez trouvé,
filter
accepte la fonction de prédicat qui accepte élément par élément du tableau. Il vous suffit donc de créer une fonction de prédicat basée sur le donnécriteria
.Dans cet exemple,
criteriaMatch
est une fonction qui renvoie une fonction de prédicat qui correspond à la donnéecriteria
.modèle:
portée:
la source
filter
méthode native dans l'objet Array:array.filter(function(item){return item.name === criteria.name;})
Voici un exemple de la façon dont vous utiliseriez
filter
dans votre JavaScript AngularJS (plutôt que dans un élément HTML).Dans cet exemple, nous avons un tableau d'enregistrements Pays, chacun contenant un nom et un code ISO à 3 caractères.
Nous voulons écrire une fonction qui recherchera dans cette liste un enregistrement correspondant à un code spécifique à 3 caractères.
Voici comment procéder sans utiliser
filter
:Oui, rien de mal à ça.
Mais voici à quoi ressemblerait la même fonction, en utilisant
filter
:Beaucoup plus soigné.
N'oubliez pas que
filter
renvoie un tableau comme résultat (une liste d'enregistrements correspondants), donc dans cet exemple, nous voulons soit retourner 1 enregistrement, soit NULL.J'espère que cela t'aides.
la source
De plus, si vous souhaitez utiliser le filtre dans votre contrôleur de la même manière que vous le faites ici:
Vous pouvez faire quelque chose comme:
la source
var filteredItems = $filter('criteriaMatch')(items, criteria);