Eche un vistazo al ejemplo aquí: http://docs.angularjs.org/api/ng.filter:filter
Puede buscar por cualquiera de las propiedades del teléfono usando <input ng-model="search">
y puede buscar solo por el nombre usando <input ng-model="search.name">
, y los resultados se filtran apropiadamente por nombre (escribir un número de teléfono no arroja ningún resultado, como se esperaba).
Digamos que tengo un modelo con una propiedad "nombre", una propiedad de "teléfono", y una propiedad "secreta", ¿cómo hago para filtrar por tanto el "nombre" y propiedades "teléfono" y no la propiedad "secreta" ? Entonces, en esencia, el usuario podría escribir un nombre o número de teléfono y el ng-repeat
filtro se filtraría correctamente, pero incluso si el usuario ingresara un valor que equivaliera a parte de un valor "secreto", no devolvería nada.
Gracias.
ng-model
(especificandosearch.name
en el campo de ENTRADAng-model
) daría como resultado que los objetos que se van a repetir sean filtrados por suname
propiedad. Es decir, intuitivamente para mí, debería poder filtrar específicamente con soloname
especificar en sung-repeat
filtro:, enfilter: friend.name
lugar de `escribir` <input ng-model = "search.name"> ...Respuestas:
Aquí está el plunker
Nuevo plunker con código más limpio y donde tanto la consulta como los elementos de la lista de búsqueda no distinguen entre mayúsculas y minúsculas
La idea principal es crear una función de filtro para lograr este propósito.
Del documento oficial
Actualizar
Algunas personas pueden estar preocupadas por el rendimiento en el mundo real, lo cual es correcto.
En el mundo real, probablemente haríamos este tipo de filtro desde el controlador.
Aquí está la publicación detallada que muestra cómo hacerlo.
en resumen, agregamos
ng-change
a la entrada para monitorear el nuevo cambio de búsqueday luego activar la función de filtro.
fuente
item.brand.indexOf($scope.query)!=-1 || item.model.indexOf($scope.query)!=-1)
Puede pasar un objeto como parámetro a su expresión de filtro, como se describe en la Referencia de API . Este objeto puede aplicar selectivamente las propiedades que le interesan, así:
Aquí está un Plunker
Atención ... este ejemplo funciona muy bien con AngularJS 1.1.5, pero no siempre tan bien en 1.0.7. En este ejemplo, 1.0.7 se inicializará con todo filtrado y luego funcionará cuando comience a usar las entradas. Se comporta como si las entradas tuvieran valores que no coinciden, aunque comienzan en blanco. Si desea permanecer en versiones estables, continúe y pruebe esto para su situación, pero es posible que algunos escenarios quieran usar la solución de @ maxisam hasta que se publique 1.2.0.
fuente
Me inspiré en la respuesta de @ maxisam y creé mi propia función de clasificación y pensé en compartirla (porque estoy aburrido).
Situación Quiero filtrar a través de una variedad de autos. Las propiedades seleccionadas para filtrar son nombre, año, precio y km. El precio de la propiedad y el km son números (de ahí el uso de
.toString
). También quiero controlar las letras mayúsculas (por lo tanto.toLowerCase
). También quiero poder dividir mi consulta de filtro en diferentes palabras (por ejemplo, dado el filtro Acura 2006, encuentra coincidencias 2006 con el año y Acura con el nombre).Función paso a filtrar
fuente
Si está abierto a usar bibliotecas de terceros, los 'Filtros angulares' con una buena colección de filtros pueden ser útiles:
https://github.com/a8m/angular-filter#filterby
fuente
Espero que esta respuesta ayude, Filtro de valor múltiple
Y ejemplo de trabajo en este violín
fuente
Hay un montón de buenas soluciones aquí, pero sugeriría ir por la otra ruta con esto. Si la búsqueda es lo más importante y la propiedad 'secreta' no se usa en absoluto en la vista; mi enfoque para esto sería usar el filtro angular incorporado con todos sus beneficios y simplemente mapear el modelo a una nueva matriz de objetos.
Ejemplo de la pregunta:
Ahora, en html simplemente use el filtro regular para buscar ambas propiedades.
fuente
Enfoque bastante sencillo usando filterBy en angularJs
Para trabajar plnkr siga este enlace
http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview
Esto ha utilizado especialmente una propiedad única para buscar en varias columnas, pero no en todas.
controlador
fuente
Resolví esto simplemente:
fuente
http://plnkr.co/edit/A2IG03FLYnEYMpZ5RxEm?p=preview
Aquí hay una búsqueda sensible a mayúsculas y minúsculas que también separa su búsqueda en palabras para buscar también en cada modelo. Solo cuando encuentre un espacio, intentará dividir la consulta en una matriz y luego buscará cada palabra.
Devuelve verdadero si cada palabra está al menos en uno de los modelos.
fuente
El filtro puede ser un objeto JavaScript con campos y puede tener una expresión como:
fuente
Me gusta mantenerlo simple cuando sea posible. Necesitaba agrupar por Internacional, filtrar en todas las columnas, mostrar el recuento de cada grupo y ocultar el grupo si no existían elementos.
Además, no quería agregar un filtro personalizado solo por algo tan simple como esto.
fuente
Puede que llegue muy tarde, pero esto es lo que terminé haciendo. Hice un filtro muy general.
Entonces úsalo así
Tu cuadro de búsqueda es como
donde name y device_id son propiedades en dvs
fuente
Aquí hay una solución simple para aquellos que desean un filtro rápido contra un objeto:
El filtro de matriz le permite imitar el objeto que está tratando de filtrar. En el caso anterior, las siguientes clases funcionarían bien:
Y dónde podría verse la plataforma:
Y si desea filtrar varias propiedades del objeto, simplemente separe los nombres de los campos con una coma:
EDITAR: Aquí hay un plnkr en funcionamiento que proporciona un ejemplo de filtros de propiedad únicos y múltiples:
http://embed.plnkr.co/i0wCx6l1WPYljk57SXzV/
fuente
ng-repeat
. Sin embargo, su ejemplo parece un poco complicado: ¿hay alguna forma de resumirlo? Sé que la pregunta es esencialmente buscar un único campo de búsqueda que pueda filtrar solo las propiedades seleccionadas. En su ejemplo, parece que estamos filtrando por nombres o números de valor nominal, pero no por ambos. Si no entiendo bien su ejemplo, hágamelo saber.