AngularJS ng-options按数组值过滤

问题描述 投票:1回答:1

我需要一些帮助,弄清楚如何使用AngularJS过滤器只显示符合我条件的选项。

我有下面的数组。

var users = [
  {'id':0, 'name':'John',  'roles':['Admin']},
  {'id':1, 'name':'Alice', 'roles':['Admin', 'Tech']},
  {'id':2, 'name':'Sam':   'roles':['Tech']}
]

我用以下代码渲染<select>列表中的所有用户。但我只想向用户展示谁是“Tech”的角色。我在这里经历了一些其他的答案,但他们都使用带有对象的过滤器,我正在尝试使用数组。

<select data-ng-options="item.id as item.name for item in users"></select>

我试图只在data-ng-if="item.roles.indexOf('Tech') > -1"标签上显示<select>的选项,但这种情况从未得到满足,因此下拉列表根本没有显示(这是有意义的)。

我还尝试将data-ng-options="item.id as item.name for item in users | filter:{item.roles:'Tech'}"与过滤器一起使用,但是因为AngularJS解析错误而失败。

不知道如何按数组值过滤。

angularjs angularjs-filter
1个回答
2
投票

您上次尝试的逻辑是正确的,但语法错误很小。请尝试以下方法

<select ng-model="selectedValue" data-ng-options="item.id as item.name for item in users | filter: { roles: ('Tech') }"></select>

您也可以为此创建自己的自定义过滤器功能

HTML

<select ng-model="selectedValue" data-ng-options="item.id as item.name for item in users | filter:customFilter"></select>

JS

$scope.customFilter = function(row){
    if(row.roles.includes("Tech")){
        return true;
    }
    else{
        return false;
    }
}

Demo

© www.soinside.com 2019 - 2024. All rights reserved.