用于未定义属性的 ng-repeat 过滤器

Posted

技术标签:

【中文标题】用于未定义属性的 ng-repeat 过滤器【英文标题】:ng-repeat filter for where an attribute is undefined 【发布时间】:2014-09-30 08:52:08 【问题描述】:

我希望这在角度上真的很简单。

我有一个包含翻译人员和其他用户的列表

[user: 'a',languages:['french','english','spanish'],
user: 'b']

然后我有一个 ng-repeat,我只想显示有语言的用户

ng-repeat="translator in users | filter: languages"

但不幸的是,我似乎无法弄清楚如何通过属性的存在进行过滤。 我已经尝试了各种方式

languages:'!undefined'
languages.length > 0
languages.length:'!0'

我不想为此编写一个外部过滤器,因为我确信它是有可能的,我只是无法正确使用术语。

【问题讨论】:

我认为您应该为用户数组中的所有元素保持相同的结构,即使用户“b”的语言为空。 你反对在作用域上写函数吗? 不同的解决方案:***.com/a/24992197/257470 【参考方案1】:
<div ng-repeat="translator in users | filter :  languages : '!!' ">

解释:

考虑如下列表:

$scope.items = [
    
        propertyOne: 'a',
        propertyTwo: 'hello'
    ,
    
        propertyOne: 'b', 
        propertyTwo: null
    ,
    
        propertyOne: 'c', 
        propertyTwo: undefined
    ,
    
        propertyOne: 'd'
    
];

'!!' 过滤掉具有特定属性的对象或具有非未定义或空的特定属性的对象:

<div ng-repeat="item in items | filter :  propertyTwo : '!!' ">
    item.propertyOne
</div>
<!-- outputs: a -->

'!' 过滤掉不具有特定属性的对象或具有未定义或空的特定属性的对象:

<div ng-repeat="item in items | filter :  propertyTwo : '!' ">
    item.propertyOne
</div>
<!-- outputs: b c d -->

Plnkr

注意:它不适用于值为 0、false 或空字符串 ('') 的属性。

编辑:先前的答案与 plunkr 示例不同。我通过交换'!!'来修复它们和“!”。

【讨论】:

你能解释一下吗? @ebramtharwat 解释已添加。 @ebramtharwat,为了进一步解释,很多人都不知道,!!是绝对真理,对于任何非 null 或 undefined 的值都返回 true,因此像 0 和空字符串这样的原因值返回 true。不知道为什么 false 会返回?很好用,还没考虑过。 当属性类型为布尔值时,!! 似乎不适用于 angular 1.3.15 你把你的 !和 !!运算符中的例子或解释? (结果与您关于效果的陈述不符)【参考方案2】:

控制器:

var app = angular.module('app',[]);
app.controller('ctrl', function($scope) 
   $scope.hasLanguage = function(user) 
       return user.hasOwnProperty('languages');
    
 );

html

ng-repeat="translator in users | filter: hasLanguage"

【讨论】:

以上是关于用于未定义属性的 ng-repeat 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Angular.js ng-repeat 按具有多个值之一(或值)的属性过滤

根据子对象属性过滤 ng-repeat 列表

角.js。如何计算满足自定义过滤器的 ng-repeat 迭代

布尔值上的 ng-repeat 过滤器

ng-repeat 上的 Angularjs OrderBy 不起作用

AngularJS-自定义过滤器 ng-repeat 求和