AngularJS filtre personnalisé fonction
À l'intérieur de mon contrôleur, 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 $filter('filter')(array, function)
format mais je ne sais pas comment accéder aux éléments individuels de la matrice à l'intérieur de ma fonction. Voici un extrait de code pour montrer ce que je veux.
$filter('filter')(array, function() {
return criteriaMatch(item, criteria);
});
Et puis dans le criteriaMatch()
, je vais vérifier si chaque propriété correspond à la
var criteriaMatch = function(item, criteria) {
//go thro each individual property in the item and criteria
//and check if they are equal
}
Que j'ai à faire tous ces, dans le contrôleur, et de compiler une liste de listes et de les mettre dans le champ d'application. Donc je n'ai besoin d'accéder à la $filter('filter')
de cette façon. Tous les exemples que j'ai trouvé sur le net jusqu'à présent ont statique critères de recherches à l'intérieur de la fonction, ils ne passent pas un des critères de l'objet et de tester chaque élément d'un tableau.
- Pourquoi avez-vous besoin d'un filtre? Généralement, on utilise des filtres à partir de modèles. Pouvez-vous ne pas seulement avoir une simple fonction de votre contrôleur en cas d'utilisation à partir de là?
- au lieu de le faire manuellement en allant thro chaque élément du tableau, j'ai pensé que nous pourrions utiliser le filtre $('filter') des fonctionnalités de angulaire (qui prendra soin d'itération thro chaque élément, si nous suffit de spécifier la fonction de prédicat)
Vous devez vous connecter pour publier un commentaire.
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 de l'élément depar élément du tableau.
Donc, vous avez juste à créer une fonction de prédicat sur la base de la
criteria
.Dans cet exemple,
criteriaMatch
est une fonction qui retourne un prédicatla fonction qui correspond à la donnée
criteria
.modèle:
portée:
filter
méthode de la Matrice de l'objet:array.filter(function(item){return item.name === criteria.name;})
Voici un exemple de comment vous pouvez utiliser
filter
au sein de votre JavaScript AngularJS (plutôt que dans un élément HTML).Dans cet exemple, nous avons un tableau de registres nationaux, contenant chacune un nom et un 3 caractères code ISO.
Nous voulons écrire une fonction qui permet de rechercher par le biais de cette liste pour un enregistrement qui correspond à une spécifiques 3-code de caractère.
Voici comment nous pourrions nous faire sans à l'aide de
filter
:Yup, rien de mal à cela.
Mais voici comment la même fonction rechercher, à l'aide de
filter
:Beaucoup plus soignée.
Rappelez-vous que
filter
renvoie un tableau comme un résultat (une liste d'enregistrements correspondants), ainsi, dans cet exemple, nous allons vous voulez revenir 1 enregistrement, ou la valeur NULL.Espère que cette aide.
En outre, si vous souhaitez utiliser le filtre de votre contrôleur de la même manière que vous le faites ici:
Vous pourriez faire quelque chose comme:
var filteredItems = $filter('criteriaMatch')(items, criteria);