Angular.js: el filtro de entrada de número no funciona si borramos el valor

Creado en 26 nov. 2014  ·  5Comentarios  ·  Fuente: angular/angular.js

si borramos el valor de entrada del número (lo dejamos vacío), lo ideal sería que no se aplicara el filtro y todos los valores deberían aparecer en la lista. En este momento, si aplicamos algún filtro al poner un número, digamos 5 en el cuadro de entrada, funciona bien y todos los datos que coinciden con 5 se enumeran. Ahora, si borramos el valor en el cuadro de entrada, idealmente todos los valores deberían aparecer en la lista (sin filtro) pero angular aplica un filtro nulo para los números y todo se filtra (ng-repeat no enumera nada).

tipo de entrada = "número" ng-modelo = "edad"

filtro: edad

Nota: no hay problema con el tipo = entrada de texto

forms low confusing bug

Comentario más útil

(Como mencionaste) esto sucede porque input[number] asigna null al modelo cuando el campo está vacío.

Esperar que esto funcione de la manera esperada es razonable (en mi opinión), pero no estoy seguro de cómo podríamos abordar esto.
No es deseable arreglarlo en el lado del filtro, porque null puede ser un valor válido para buscar (y no podemos tratarlo como indefinido). Arreglarlo en NgModelController probablemente tampoco sea una solución viable.

@otros : ¿Pensamientos?

Mientras tanto, puede usar esta solución (no tan hermosa):

<input type="number" ng-model="search.posts" />
...
<div ng-repeat="user in users | filter:((search.posts===null)?undefined:search)">...</div

Violín de demostración

Todos 5 comentarios

(Como mencionaste) esto sucede porque input[number] asigna null al modelo cuando el campo está vacío.

Esperar que esto funcione de la manera esperada es razonable (en mi opinión), pero no estoy seguro de cómo podríamos abordar esto.
No es deseable arreglarlo en el lado del filtro, porque null puede ser un valor válido para buscar (y no podemos tratarlo como indefinido). Arreglarlo en NgModelController probablemente tampoco sea una solución viable.

@otros : ¿Pensamientos?

Mientras tanto, puede usar esta solución (no tan hermosa):

<input type="number" ng-model="search.posts" />
...
<div ng-repeat="user in users | filter:((search.posts===null)?undefined:search)">...</div

Violín de demostración

Devolvemos null porque devolver undefined de un analizador establece un error de análisis. Otra razón por la que ese no es el mejor diseño.

@Narretz Estaba a punto de preguntar por qué no devolvemos undefined :-)

Sé que esta publicación es un poco antigua, pero lo pasé muy mal para descubrir cómo resolver este problema, así que quiero compartir mi solución. Agregue un evento oninput a su campo de entrada y en la función javascript verifique si el valor de este campo es una cadena vacía, si es así, elimine el valor del campo de entrada con:
eliminar document.getElementById ('lo que sea'). value;

No creo que se suponga que los atributos HTMLInputElement sean configurables

¿Fue útil esta página
0 / 5 - 0 calificaciones