Javascript 带有空值的AngularJS ngRepeat筛选器永久删除空值,为什么?
下面是我制作的一个JSFIDLE示例,它解释了这个问题: 请注意,在数据中Javascript 带有空值的AngularJS ngRepeat筛选器永久删除空值,为什么?,javascript,arrays,html,angularjs,Javascript,Arrays,Html,Angularjs,下面是我制作的一个JSFIDLE示例,它解释了这个问题: 请注意,在数据中 $scope.places = [{ name: 'Chicago', status: 'Active', analyst: 'Sam', recorder: 'Nate' //this can have a value or be null }, .... more data...]; 有时我将记录器设置为null,有时设置为空字符串 我觉得奇怪的是,当我在记录器上排序时,空值消失了
$scope.places = [{
name: 'Chicago',
status: 'Active',
analyst: 'Sam',
recorder: 'Nate' //this can have a value or be null
}, .... more data...];
有时我将记录器设置为null,有时设置为空字符串
我觉得奇怪的是,当我在记录器上排序时,空值消失了,当我清除过滤字段时,再也不会回来
表中的行将被永久删除。为什么呢?当数据库没有记录器名称时,我可以通过确保java生成空字符串而不是空字符串来修复真实应用程序中的问题,但我不明白为什么一开始就存在这个问题
我在想这与给定给被删除元素的散列值有关,空值不能有散列?我认为Angular能够以某种方式补偿,但也许不能
另一种解决方案是使用ng hide,并以这种方式编写自定义过滤器。ng hide只是在css中添加一个display:none,并将元素保留在DOM中。当您第一次加载页面时,$scope.filteredata.recorder未定义,因为您没有在控制器中显式设置它。未定义时,它不会过滤您的数据
在记录器过滤器文本字段中输入内容后,$scope.filteredData.recorder将设置为等于该字符串。清除输入文本字段后,$scope.filteredata.recorder==''将继续使用空字符串过滤数据,该字符串将匹配除为空/未定义之外的所有数据。是否有方法防止此行为并重新显示空值?@RyanAllen-是,您可以将自己的自定义比较器函数传递给过滤器,并对空值执行任何操作。见文件@。在本例中,如果filteredData.recorder=='',函数可以简单地返回true,并绕过典型的实际===预期检查。