当前位置: 首页 > 面试题库 >

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

司寇星海
2023-03-14
问题内容

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

我有翻译人员和其他用户的清单

[{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'}

我不想为此编写一个外部过滤器,因为我敢肯定它可能成角度,但我只是无法正确理解这些术语。


问题答案:
<div ng-repeat="translator in users | filter : { languages : '!!' }">

说明:

考虑如下列表:

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

'!!' 筛选出具有特定属性的对象或具有未定义或null的特定属性的对象:

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

'!' 筛选出不具有某些属性的对象或具有未定义或为null的特定属性的对象:

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

普伦克

注意:它不适用于值为0,false或空string(’‘)的属性。

编辑:以前的答案是与plunkr示例不同。我通过交换’!!’来解决它们。和’!’。



 类似资料:
  • 问题内容: 我是AngularJS的新手,我正在构建一个小型的概念验证租车清单应用程序,该应用程序会提取一些JSON,并通过ng- repeat并使用几个过滤器来呈现这些数据的各个部分: 现在,我想在控制器中创建一个自定义过滤器,该过滤器可以迭代ng-repeat中的项目,并仅返回满足特定条件的项目-例如,我可以根据哪个“ provider”复选框创建值数组进行检查,然后评估每个ng-repeat

  • 问题内容: 我正在尝试根据布尔属性的值过滤一些列表项,但是无论我做什么,总会显示整个列表。我尝试过的一些东西已经坏掉了,什么也没显示,但这既不存在也不存在。我无法按需进行过滤: 使用以下ng-repeat过滤: 我觉得我已经尝试了所有可以找到引用的排列,其中大部分来自各种StackOverflow搜索结果: 我也尝试过创建自定义过滤器功能: 并因此应用它: 这些似乎都不起作用。我想念什么? 这是演

  • 问题内容: jsfiddle http://jsfiddle.net/KfSBq/ 所谓子对象,是指我用ng-repeat显示的所有对象在其内部都包含一个对象列表,并且我希望根据这些子对象之一的属性进行过滤。 仅此一项就非常简单。我有个对象,每个对象都包含和对象列表: 我按类别显示它们: 我的问题是现在仍然显示不包含任何条目的日常对象。如何实现一种情况,如果过滤使列表为空,则该列表也不显示? 问题

  • 问题内容: 我有一个简单的导航对象设置,其中列出了导航项(以及它们是否应出现在主导航中)。看来,当我尝试将ng-if与ng- repeat混合使用时,情况会分崩离析,但是当我将ng-show与ng- repeat混合使用时,它可以正常工作(但是最后我得到了一堆隐藏的元素,但我没有想要附加到DOM)。 但是以下操作无效(请注意,现在是): 路线对象看起来像 尝试使用时收到以下错误: 错误:多个指令[

  • 问题内容: 如果我的措词不正确,我事先表示歉意。我在的内部有一个文本框,当我尝试获取文本框值时始终为。我只希望它显示我在相应文本框中键入的内容。 似乎是一个问题,那么我该如何创建全局或控制器根级别以便可以访问它? 这是帮助解决问题的JSFiddle:http : //jsfiddle.net/stevenng/9mx9B/14/ 问题答案: 在您的点击表达式中,您可以引用并在您的函数中对其进行访问

  • 问题内容: 我想知道Angular中是否有一种简单的方法,可以使用特定的列(而非逻辑)来过滤表。现在,当我的过滤器实际上只需要过滤2列数据(ID和Name)时,它就会搜索表中的所有内容(10列以上的数据)。 我设法使它仅在过滤时仅查看这两列(通过根据文档在过滤器表达式中使用一个对象并查看此SO答案,但是它使用的是逻辑,太具体了。我想让它使用逻辑,但是遇到了麻烦。 我的HTML 我的过滤逻辑: 过滤