Quiero usar el filter
en angular y quiero filtrar por múltiples valores, si tiene uno de los valores, entonces debería mostrarse.
Tengo por ejemplo esta estructura:
Un objeto movie
que tiene la propiedad genres
y quiero filtrar por Action
y Comedy
.
Sé que puedo hacer filter:({genres: 'Action'} || {genres: 'Comedy'})
, pero qué hacer si quiero filtrarlo dinámicamente. P.ejfilter: variableX
¿Cómo configuro variableX
el $scope
, cuando tengo una variedad de géneros que tengo que filtrar?
Podría construirlo como una cadena y luego hacer un eval()
pero no quiero usar eval () ...
javascript
angularjs
angularjs-ng-repeat
JustGoscha
fuente
fuente
filter:({genres: 'Action'} || {genres: 'Comedy'})
incluso funciona? no entraangular 1.3.16
.Respuestas:
Simplemente crearía un filtro personalizado. No son tan difíciles.
modelo:
Editar aquí está el enlace: Crear filtros angulares
ACTUALIZACIÓN : Aquí hay un violín que tiene una demostración exacta de mi sugerencia.
fuente
Puede usar una función de controlador para filtrar.
HTML:
fuente
$scope.filteredMovies = $filter('filter')($scope.movies, $scope.filterByGenres);
Crear un filtro personalizado puede ser excesivo aquí, solo puede pasar un comparador personalizado, si tiene valores múltiples como:
luego en el filtro:
fuente
ng-model
archivo de vista para vincular con el filtro descrito? (lo siento, todavía está aprendiendo aquí) - me gusta la simplicidad de su respuesta y tratando de conseguir que funcione, pero no está seguro de cómo etiquetar mis<input>
'sng-model
. :)Aquí está la implementación de un filtro personalizado, que filtrará los datos utilizando una matriz de valores. Admitirá objetos de clave múltiple con matriz y valor único de claves. Como se mencionó en la API deangularJS, el filtro AngularJS Doc admite un filtro de clave múltiple con un solo valor, pero el filtro personalizado a continuación admitirá la misma característica que angularJS y también admite una matriz de valores y una combinación de la matriz y el valor único de las claves. Busque el fragmento de código a continuación,
Uso:
Aquí hay un ejemplo de violín con la implementación del filtro personalizado "filterMutiple" anterior . ::: Ejemplo de violín :::
fuente
length property undefined
error en la consola.if (fData.length > 0){ this.filteredData = fData; }
a solo:this.filteredData = fData;
Si desea filtrar en la matriz de objetos, puede dar
filter:({genres: 'Action', key :value }.
La propiedad individual será filtrada por un filtro particular dado para esa propiedad.
Pero si desea filtrar algo por Propiedad individual y filtrar globalmente todas las propiedades, puede hacer algo como esto.
~ Atul
fuente
He dedicado algo de tiempo y gracias a @chrismarx, vi que el valor predeterminado de angular le
filterFilter
permite pasar su propio comparador. Aquí está el comparador editado para múltiples valores:Y si queremos hacer un filtro personalizado para DRY:
Y luego podemos usarlo en cualquier lugar que queramos:
Finalmente aquí hay un plunkr .
Nota: La matriz esperada solo debe contener objetos simples como String , Number , etc.
fuente
puedes usar el filtro searchField de angular.filter
JS:
HTML:
fuente
search
paradas aquí.También puede usar
ngIf
si la situación lo permite:fuente
La solución más rápida que he encontrado es utilizar el
filterBy
filtro de filtro angular , por ejemplo:Lo bueno es que el filtro angular es una biblioteca bastante popular (~ 2.6k estrellas en GitHub) que todavía se desarrolla y mantiene activamente, por lo que debería estar bien agregarlo a su proyecto como una dependencia.
fuente
Creo que esto es lo que estás buscando:
fuente
Por favor intente esto
fuente
Supongamos que tiene dos conjuntos, uno para película y otro para género.
Solo usa el filtro como:
filter:{genres: genres.type}
Aquí los géneros son la matriz y el tipo tiene valor para el género
fuente
Escribí esto para cadenas y funcionalidad (sé que no es la pregunta, pero lo busqué y llegué aquí), tal vez pueda expandirse.
Uso:
fuente
Módulo angular o de filtro
$filter('orFilter')([{..}, {..} ...], {arg1, arg2, ...}, false)
Aquí está el enlace: https://github.com/webyonet/angular-or-filter
fuente
Tuve una situación similar. Escribir filtros personalizados funcionó para mí. ¡Espero que esto ayude!
JS:
HTML:
fuente
Aquí está mi ejemplo de cómo crear filtro y directiva para la tabla jsfiddle
directiva obtener lista (datos) y crear tabla con filtros
un placer si te ayudo
fuente
Demasiado tarde para unirse a la fiesta, pero puede ser que pueda ayudar a alguien:
Podemos hacerlo en dos pasos, primer filtro por primera propiedad y luego concatenar por segundo filtro:
Vea el violín de trabajo con filtro de propiedades múltiples
fuente
OPCIÓN 1: Uso del parámetro de comparación de filtro proporcionado angular
OPCIÓN 2: Uso de negación de filtro proporcionado angular
fuente
Mi solución
fuente
la mejor respuesta es:
fuente