Comment filtrer plusieurs valeurs (OU de fonctionnement) en angularJS
Je veux utiliser le filter
angulaire et souhaitez filtrer pour plusieurs valeurs, si elle a une des valeurs, alors il devrait être affiché.
J'ai par exemple cette structure:
Un objet movie
qui a la propriété genres
et je veux filtre pour Action
et Comedy
.
Je sais que je peux faire filter:({genres: 'Action'} || {genres: 'Comedy'})
, mais que faire si je veux filtrer dynamiquement. E. g. filter: variableX
Comment puis-je régler variableX
dans le $scope
, quand j'ai un tableau des genres que j'ai à filtre?
J'ai pu construire comme une chaîne de caractères et ensuite faire un eval()
mais je ne veux pas utiliser la fonction eval()...
- êtes-vous sûr que
filter:({genres: 'Action'} || {genres: 'Comedy'})
fonctionne même? il n'est pas dansangular 1.3.16
. - de même pour 1.4.8 ! c'est juste ne fonctionne pas ^^
Vous devez vous connecter pour publier un commentaire.
Je voudrais juste créer un filtre personnalisé. Ils ne sont pas si difficile.
modèle:
Modifier voici le lien: La Création Angulaire Filtres
Mise à JOUR: Voici un violon qui a exactement la démo de ma suggestion.
Vous pouvez utiliser une fonction de contrôleur de filtre.
HTML:
$scope.filteredMovies = $filter('filter')($scope.movies, $scope.filterByGenres);
Créer un filtre personnalisé peut être exagéré ici, vous pouvez tout simplement passer à une coutume de comparaison, si vous avez les multiples valeurs comme:
puis dans le filtre:
ng-model
être dans le fichier de vue de relier jusqu'à l'décrit filtre? (désolé, encore en apprentissage ici) -- j'aime la simplicité de votre réponse et essayer de le faire fonctionner mais ne savez pas comment l'étiquette de mon<input>
'sng-model
. 🙂Ici est la mise en œuvre de filtre personnalisé, qui permettra de filtrer les données à l'aide du tableau de valeurs.Il sera en charge de multiples clés de l'objet à la fois matrice et la valeur unique de clés. Comme mentionné inangularJS API AngularJS filtre Doc prend en charge de multiples clés de filtre avec une seule valeur, mais en dessous de filtre personnalisé soutiendra les mêmes caractéristiques que angularJS et prend également en charge tableau de valeurs et la combinaison des deux tableau et la valeur unique de clés.S'il vous plaît trouver l'extrait de code ci-dessous,
Utilisation:
Ici est un violon exemple avec la mise en œuvre de ci-dessus "filterMutiple" filtre personnalisé.
:::Violon Exemple:::
length property undefined
d'erreur dans la console.if (fData.length > 0){ this.filteredData = fData; }
pour seulement:this.filteredData = fData;
Si vous souhaitez filtrer sur le Tableau des Objets alors que vous pouvez donner à
filter:({genres: 'Action', key :value }.
La propriété individuelle sera filtré par filtre particulier compte tenu de cette propriété.
Mais si vous voulez quelque chose comme filtre par la Propriété individuelle et le filtre à l'échelle mondiale pour toutes les propriétés, alors vous pouvez faire quelque chose comme ça.
JS:
Où "filterObject" est un objet pour la recherche d'une propriété individuelle et de la "Recherche" recherche dans tous les biens à l'échelle mondiale.
~Atul
J'ai passé un peu de temps sur elle et merci à @chrismarx, j'ai vu que angulaires par défaut de
filterFilter
vous permet de transmettre votre propre comparateur. Voici monté en comparateur pour plusieurs valeurs:Et si nous voulons faire un filtre personnalisé pour SEC:
Et puis on peut l'utiliser n'importe où nous voulons:
Enfin voici un plunkr.
Note: Attendu tableau ne doit contenir que des objets simples comme Chaîne, Nombre etc.
vous pouvez utiliser searchField filtre de angulaire.filtre
JS:
HTML:
search
s'arrête ici.Vous pouvez également utiliser
ngIf
si la situation le permet:La solution la plus rapide que j'ai trouvé est d'utiliser le
filterBy
filtre de angulaires-filtre, par exemple:L'avantage est que angulaires-filtre est assez populaire bibliothèque (~2.6 k étoiles sur GitHub) qui est toujours activement développé et maintenu, il devrait être bon pour l'ajouter à votre projet en tant que dépendance.
Je crois que c'est ce que vous cherchez:
S'il vous plaît essayer cette
Supposons que vous avez deux tableau, un film et un pour le genre
Suffit d'utiliser le filtre:
filter:{genres: genres.type}
Ici genres, le tableau et le type a de la valeur pour le genre
J'ai écrit cela pour les chaînes ET les fonctionnalités (je sais que c'est pas la question, mais j'ai cherché et obtenu ici), peut-être il peut être étendu.
Utilisation:
Angulaire Ou Un Module De Filtre
$filter('orFilter')([{..}, {..} ...], {arg1, arg2, ...}, false)
voici le lien: https://github.com/webyonet/angular-or-filter
J'ai eu une situation similaire. L'écriture de filtre personnalisé a fonctionné pour moi. Espérons que cette aide!
JS:
HTML:
Voici mon exemple comment créer un filtre et de la directive pour la table jsfiddle
directive obtenir la liste (données) et de créer une table avec les filtres
mon plaisir si je peux vous aider
Trop tard pour se joindre à la fête, mais peut-être ça peut aider quelqu'un:
Nous pouvons le faire en deux étapes, d'abord filtre en bien et puis concaténer par le deuxième filtre:
Voir le travail de violon avec les propriétés d'un filtre
OPTION 1:
À l'aide Angulaire providered filtre comparateur de paramètre
OPTION 2:
À l'aide Angulaire providered filtre négation
Ma solution
la meilleure réponse est :