javascript - 带有 null 值的 AngularJS ngRepeat 过滤器会永久删除 null,为什么?

标签 javascript arrays html angularjs

这是我制作的一个 JSFiddle 示例,它解释了这个问题:

http://jsfiddle.net/s6Lj2/2/

请注意数据中

$scope.places = [{
    name: 'Chicago',
    status: 'Active',
    analyst: 'Sam',
    recorder: 'Nate' //this can have a value or be null
}, .... more data...];

有时我将记录器设置为 null,有时设置为空字符串

我觉得很奇怪,当我在记录器上排序时,空值消失了,并且当我清除过滤字段时再也没有回来。

表中的行将被永久删除。这是为什么?当数据库没有记录器名称时,我能够通过确保 java 生成空字符串而不是空值来解决实际应用程序中的问题,但我不明白为什么它一开始就是一个问题。

我认为这与赋予删除元素的哈希值有关,并且 null 不能有哈希值?我认为 Angular 能够以某种方式弥补这一点,但也许不能。

另一个解决方案是仅使用 ng-hide 并以这种方式编写自定义过滤器。 ng-hide 只是在 css 中添加了一个 display:none 并将元素保留在 DOM 中。

最佳答案

当您第一次加载页面时,$scope.filteredData.recorder 未定义,因为您没有在 Controller 中显式设置它。当它未定义时,它不会过滤您的数据。

在记录器过滤器文本字段中输入某些内容后,$scope.filteredData.recorder 将设置为等于该字符串。清除输入文本字段后,$scope.filteredData.recorder === '',因此它将继续通过空字符串过滤您的数据,这将匹配您的所有数据除了 null/未定义。

关于javascript - 带有 null 值的 AngularJS ngRepeat 过滤器会永久删除 null,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23414171/

相关文章:

javascript - 如何解决 Ionic Uncaught Error : Cannot find module "." when adding new page?

Javascript 显示/隐藏播放/暂停按钮

PHP 数组添加匹配元素

Javascript 文本区域选择事件

html - 带有 CSS 关键帧的 Circles "waves"动画

javascript - 根据奇数或偶数包装div的数量

javascript - 动态添加的单选按钮在 IE6、IE7 中点击时不更新

php - 关联数组不存储 SQL 的第一个结果

java - 解析 HashMap 中的字符串数组

html - 如何在父 DIV 上显示子 DIV(绝对、隐藏)?