【问题标题】:Filter on property even if it doesn't exist过滤属性,即使它不存在
【发布时间】:2025-12-23 04:15:07
【问题描述】:

在 Angular 1.2 中,我有一个对象数组:

[{
  name: 'bob'
},{
  name: 'jack',
  archived: false
},{
  name: 'ted',
  archived: true
}]

然后我会 ng-repeat 遍历数组并尝试过滤掉所有 archived = true 的对象

<div ng-repeat="person in people | filter: {archived: '!' }">

这在 angular 1.2 中效果很好

但是当我升级到 Angular 1.3 时它停止工作。

我知道我可以简单地编写自己的过滤器函数,但是有没有一种正确的方法来过滤布尔属性等于 true 的地方,而该属性可能并不存在于所有对象中。

如果该属性不存在,则不应对其进行过滤。上面示例数组中的 IE 只有 ted 应该被过滤掉。

【问题讨论】:

  • 嗯.. 为什么不直接使用filter: {archived: true}
  • 对不起,如果我混淆了事情,我想过滤掉存档 == true 的地方。这意味着我希望数组中的所有对象都已存档 == false 或根本没有存档属性。

标签: angularjs angularjs-filter


【解决方案1】:

虽然这似乎在 1.3 之前有效:

<div ng-repeat="person in people | filter: {archived: '!' }">

这在 angular 1.3 中效果很好

<div ng-repeat="person in people | filter: {archived: '!true' }">

【讨论】:

    【解决方案2】:

    UPD:使用正确的代码更新。

    我会为此创建一个辅助函数:

    $scope.notArchived = function(el) {
        return !el.archived;
    };
    

    HTML:

    ng-repeat="person in people | filter: notArchived"
    

    【讨论】:

    • 方向错误,请看其他cmets。
    • 我明白了,我会为此创建一个辅助函数。但我看到你找到了更简洁的方法。