Angular.js: числовой входной фильтр не работает, если мы очищаем значение

Созданный на 26 нояб. 2014  ·  5Комментарии  ·  Источник: angular/angular.js

если мы очистим числовое входное значение (сделаем его пустым), в идеале фильтр не должен применяться, и все значения должны быть перечислены. Прямо сейчас, если мы применим какой-то фильтр, поместив число, скажем, 5 в поле ввода, он будет работать нормально, и все данные, соответствующие 5, будут перечислены внизу. Теперь, если мы очистим значение в поле ввода, в идеале все значения должны быть перечислены (без фильтра), но angular применяет нулевой фильтр для чисел, и все отфильтровывается (ng-repeat ничего не перечисляет).

input type = "number" ng-model = "age"

фильтр: возраст

Примечание: нет проблем с type = text input

forms low confusing bug

Самый полезный комментарий

(Как вы упомянули) это происходит потому, что input[number] назначает null модели, когда поле пусто.

Ожидать, что это сработает так, как вы ожидаете, разумно (imo), но я не уверен, как мы могли бы решить эту проблему.
Исправлять его на стороне фильтра нежелательно, потому что null может быть допустимым значением для поиска (и мы не можем рассматривать его как неопределенное). Исправление этого на NgModelController , вероятно, тоже не является жизнеспособным решением.

@others : Мысли?

А пока вы можете использовать этот (не очень красивый) обходной путь:

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

Демо скрипка

Все 5 Комментарий

(Как вы упомянули) это происходит потому, что input[number] назначает null модели, когда поле пусто.

Ожидать, что это сработает так, как вы ожидаете, разумно (imo), но я не уверен, как мы могли бы решить эту проблему.
Исправлять его на стороне фильтра нежелательно, потому что null может быть допустимым значением для поиска (и мы не можем рассматривать его как неопределенное). Исправление этого на NgModelController , вероятно, тоже не является жизнеспособным решением.

@others : Мысли?

А пока вы можете использовать этот (не очень красивый) обходной путь:

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

Демо скрипка

Мы возвращаем null потому что возврат undefined из парсера устанавливает ошибку синтаксического анализа. Еще одна причина, почему это не лучший дизайн.

@Narretz Я хотел спросить, почему мы не возвращаем undefined :-)

Я знаю, что этот пост довольно старый, но мне было очень плохо, пытаясь понять, как решить эту проблему, поэтому я хочу поделиться своим решением. Добавьте событие oninput в поле ввода и в функции javascript проверьте, является ли значение этого поля пустой строкой, если да, удалите значение поля ввода с помощью:
удалить document.getElementById ('что угодно'). значение;

Я не думаю, что атрибуты HTMLInputElement должны быть настраиваемыми

Была ли эта страница полезной?
0 / 5 - 0 рейтинги