Angular.js: le filtre d'entrée numérique ne fonctionne pas si nous effaçons la valeur

Créé le 26 nov. 2014  ·  5Commentaires  ·  Source: angular/angular.js

si nous effaçons la valeur d'entrée du nombre (rendez-la vide), idéalement, le filtre ne devrait pas être appliqué et toutes les valeurs devraient être répertoriées. À l'heure actuelle, si nous appliquons un filtre en mettant le nombre, disons 5 dans la zone de saisie, cela fonctionne bien et toutes les données correspondant à 5 sont répertoriées. Maintenant, si nous effaçons la valeur dans la zone de saisie, idéalement toutes les valeurs devraient être répertoriées (pas de filtre) mais angular applique un filtre nul pour les nombres et tout est filtré (ng-repeat ne répertorie rien).

type d'entrée = "nombre" ng-model = "âge"

filtre: âge

Remarque: aucun problème avec type = saisie de texte

forms low confusing bug

Commentaire le plus utile

(Comme vous l'avez mentionné) cela se produit parce que input[number] assigne null au modèle lorsque le champ est vide.

S'attendre à ce que cela fonctionne comme vous l'attendez est raisonnable (imo), mais je ne sais pas comment nous pourrions y remédier.
Le corriger du côté du filtre n'est pas souhaitable, car null peut être une valeur valide à rechercher (et nous ne pouvons pas la traiter comme non définie). Le réparer sur le NgModelController n'est probablement pas non plus une solution viable.

@others : Pensées?

En attendant, vous pouvez utiliser cette solution de contournement (pas si belle):

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

Violon de démonstration

Tous les 5 commentaires

(Comme vous l'avez mentionné) cela se produit parce que input[number] assigne null au modèle lorsque le champ est vide.

S'attendre à ce que cela fonctionne comme vous l'attendez est raisonnable (imo), mais je ne sais pas comment nous pourrions y remédier.
Le corriger du côté du filtre n'est pas souhaitable, car null peut être une valeur valide à rechercher (et nous ne pouvons pas la traiter comme non définie). Le réparer sur le NgModelController n'est probablement pas non plus une solution viable.

@others : Pensées?

En attendant, vous pouvez utiliser cette solution de contournement (pas si belle):

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

Violon de démonstration

Nous retournons null car le retour de undefined partir d'un analyseur définit une erreur d'analyse. Une autre raison pour laquelle ce n'est pas la meilleure conception.

@Narretz J'allais demander pourquoi nous ne retournons pas undefined :-)

Je sais que cet article est un peu vieux mais j'ai vraiment eu du mal à trouver comment résoudre ce problème, alors je veux partager ma solution. Ajoutez un événement oninput à votre champ de saisie et dans la fonction javascript, vérifiez si la valeur de ce champ est une chaîne vide, si c'est le cas, supprimez la valeur du champ de saisie avec:
supprimer document.getElementById ('peu importe'). value;

Je ne pense pas que les attributs HTMLInputElement sont censés être configurables

Cette page vous a été utile?
0 / 5 - 0 notes