Angular.js: 如果清除值,则数字输入过滤器不起作用

创建于 2014-11-26  ·  5评论  ·  资料来源: angular/angular.js

如果我们清除数字输入值(使其为空),则理想情况下不应应用过滤器,而应列出所有值。 现在,如果我们通过在输入框中输入数字5来应用某些过滤器,则它可以正常工作,并且所有与5匹配的数据都将在下面列出。 现在,如果我们清除输入框中的值,理想情况下应列出所有值(不使用过滤器),但是angular对数字应用空过滤器,并且所有内容都被过滤掉(ng-repeat不列出任何内容)。

输入type =“ number” ng-model =“ age”

过滤条件:年龄

注意:type = text输入没有问题

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设置解析错误。 那不是最佳设计的另一个原因。

@Narretzundefined :-)

我知道这篇文章有点旧,但是我很难弄清楚如何解决这个问题,所以我想分享我的解决方案。 将oninput事件添加到您的输入字段,然后在javascript函数中检查此字段的值是否为空字符串,如果是,则使用以下命令删除输入字段的值:
删除document.getElementById('whatever')。value;

我不认为HTMLInputElement属性是可配置的

此页面是否有帮助?
0 / 5 - 0 等级