AngularJS ng-options 按数组值过滤

AngularJS ng-options filter by array value

我需要一些帮助来了解如何使用 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>

我尝试只在 <select> 标签上显示带有 data-ng-if="item.roles.indexOf('Tech') > -1" 的选项,但从未满足该条件,因此根本不显示下拉列表(这是有道理的)。

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

不确定如何按数组值过滤。

您上次尝试的逻辑是正确的,但有一个小的语法错误。尝试以下

<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