这是我制作的一个 JSFiddle 示例,它解释了这个问题:
请注意数据中
$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/