Angular.js: o filtro de entrada de número não funciona se limparmos o valor

Criado em 26 nov. 2014  ·  5Comentários  ·  Fonte: angular/angular.js

se limparmos o valor de entrada do número (torná-lo vazio), o filtro ideal não deve ser aplicado e todos os valores devem ser listados. No momento, se aplicarmos algum filtro colocando um número, digamos 5 na caixa de entrada, ele funcionará bem e todos os dados correspondentes a 5 serão listados. Agora, se limparmos o valor na caixa de entrada, o ideal é que todos os valores sejam listados (sem filtro), mas angular aplica filtro nulo para números e tudo é filtrado (ng-repeat não lista nada).

tipo de entrada = "número" ng-model = "idade"

filtro: idade

Observação: nenhum problema com a entrada de texto type =

forms low confusing bug

Comentários muito úteis

(Como você mencionou) isso acontece porque input[number] atribui null ao modelo quando o campo está vazio.

Esperar que isso funcione da maneira que você espera é razoável (imo), mas não tenho certeza de como poderíamos resolver isso.
Corrigir no lado do filtro não é desejável, porque null pode ser um valor válido a ser procurado (e não podemos tratá-lo como indefinido). Corrigir em NgModelController provavelmente também não é uma solução viável.

@outros : pensamentos?

Nesse ínterim, você pode usar esta (não tão bonita) solução alternativa:

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

Demo fiddle

Todos 5 comentários

(Como você mencionou) isso acontece porque input[number] atribui null ao modelo quando o campo está vazio.

Esperar que isso funcione da maneira que você espera é razoável (imo), mas não tenho certeza de como poderíamos resolver isso.
Corrigir no lado do filtro não é desejável, porque null pode ser um valor válido a ser procurado (e não podemos tratá-lo como indefinido). Corrigir em NgModelController provavelmente também não é uma solução viável.

@outros : pensamentos?

Nesse ínterim, você pode usar esta (não tão bonita) solução alternativa:

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

Demo fiddle

Retornamos null porque retornar undefined de um analisador define um erro de análise. Outra razão pela qual esse não é o melhor design.

@Narretz Eu estava prestes a perguntar por que não devolvemos undefined :-)

Eu sei que este post é meio antigo, mas eu tive uma péssima hora tentando descobrir como resolver esse problema, então eu quero compartilhar minha solução. Adicione um evento oninput ao seu campo de entrada e, na função javascript, verifique se o valor desse campo é uma string vazia; em caso afirmativo, exclua o valor do campo de entrada com:
delete document.getElementById ('qualquer'). value;

Não acho que os atributos HTMLInputElement devam ser configuráveis

Esta página foi útil?
0 / 5 - 0 avaliações