【问题标题】:AngularJS ngRepeat filter with null values removes nulls permanently, why?具有空值的 AngularJS ngRepeat 过滤器会永久删除空值,为什么?
【发布时间】:2014-06-18 07:31:20
【问题描述】:

这是一个解释问题的 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...];

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

我觉得奇怪的是,当我在记录器上进行排序时,空值消失并且在我清除过滤字段时再也不会出现。

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

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

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

【问题讨论】:

    标签: javascript arrays html angularjs


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法防止这种行为并重新显示空值?
    • @RyanAllen - 是的,您可以将自己的自定义比较器函数传递给过滤器,并对空值执行任何操作。请参阅文档@docs.angularjs.org/api/ng/filter/filter。在此示例中,如果 filtersData.recorder === '',您的函数可以简单地返回 true,并绕过典型的实际 === 预期检查。
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2018-11-11
    相关资源
    最近更新 更多