Несколько параметров углового фильтра внутри НГ-повторить


Я пытаюсь сделать фильтр внутри ng-repeat на основе пользовательского фильтра, который получает два параметра. В то же время один из этих параметров является одним из свойств объекта на повторе.

Итак, в моем коде ng-repeat у меня есть:

<tr ng-repeat="player in myTeam | bitwiseAnd:{firstNumber: player.Flag, secondNumber: type}">

Но это не работает. Если я отлаживаю его, фильтр получает в первом параметре undefined.

Я прочитал документацию: https://docs.angularjs.org/guide/filter

Я прочитал также несколько связанных вопросов в

Безуспешно.

Я создал плунжер, где мы можем видеть, как фильтр работает правильно, когда я использую его в качестве выражения, поэтому, вероятно, проблема заключается в отправке значений внутри ng-repeat заявление.

Вот плунжер: http://plnkr.co/edit/IGvDBq?p=preview

Спасибо, что уделили мне время

2 2

2 ответа:

myTeam | bitwiseAnd применяет фильтр bitwise к массиву team в целом, а не к игрокам. Таким образом, эффект похож на написание

<tr ng-repeat="player in true">

Если фильтр возвращает true. Вам нужен фильтр, который возвращает массив. Вы можете создать свой собственный фильтр или использовать фильтр-фильтр. Последнее сложно совместить с вашим, но это возможно. Сначала вы определяете функцию предиката в своем контроллере

$scope.bitwiseAnd = function(type) {
  return function(player) {
    return $filter('bitwiseAnd')(player.Flag, type);
  }
}
Эта функция применяет ваш фильтр bitwiseAnd и сама применяется к каждому игроку. Затем вы используете filterfilter с этой функцией:
<tr ng-repeat="player in myTeam | filter:bitwiseAnd(type)>

Рабочий Плунжер

Поскольку цель состоит в том, чтобы отобразить пользователей, которые проходят фильтр со значением' true', ниже код может помочь:

<tr ng-repeat="player in myTeam" ng-if="player.Flag|bitwiseAnd:type">