Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有空值的AngularJS ngRepeat筛选器永久删除空值,为什么?_Javascript_Arrays_Html_Angularjs - Fatal编程技术网

Javascript 带有空值的AngularJS ngRepeat筛选器永久删除空值,为什么?

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,有时设置为空字符串 我觉得奇怪的是,当我在记录器上排序时,空值消失了

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

请注意,在数据中

$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,并绕过典型的实际===预期检查。