【问题标题】:ng-repeat filter for where an attribute is undefined用于未定义属性的 ng-repeat 过滤器
【发布时间】: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”的语言为空。
  • 你反对在作用域上写函数吗?
  • 不同的解决方案:stackoverflow.com/a/24992197/257470

标签: angularjs filter


【解决方案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"

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2014-05-30
    • 2015-02-24
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多