Фильтр AngularJS ng-options по значению массива - PullRequest
1 голос
/ 06 марта 2019

Мне нужна помощь, чтобы понять, как я могу использовать фильтр AngularJS, чтобы показывать только те параметры, которые соответствуют моему состоянию.

У меня есть массив ниже.

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

Я отображаю всех пользователей в списке <select> с кодом ниже. Но я только хочу показать пользователям, чья роль - «Технология». Здесь я рассмотрел несколько других ответов, но все они используют фильтр с объектом, я пытаюсь сделать это с массивом.

<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.

Не уверен, как я могу фильтровать по значениям массива.

1 Ответ

2 голосов
/ 06 марта 2019

Ваша логика в последней попытке верна, но у вас небольшая синтаксическая ошибка. Попробуйте следующее

<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;
    }
}

Демо

...