Несколько параметров углового фильтра внутри НГ-повторить
Я пытаюсь сделать фильтр внутри ng-repeat на основе пользовательского фильтра, который получает два параметра. В то же время один из этих параметров является одним из свойств объекта на повторе.
Итак, в моем коде ng-repeat у меня есть:
<tr ng-repeat="player in myTeam | bitwiseAnd:{firstNumber: player.Flag, secondNumber: type}">
Но это не работает. Если я отлаживаю его, фильтр получает в первом параметре undefined.
Я прочитал документацию: https://docs.angularjs.org/guide/filter
Я прочитал также несколько связанных вопросов в
- фильтрация по нескольким специфическим свойствам модели в AngularJS (in OR relationship)
- передача аргументов фильтрам angularjs
- Как я могу назвать угловой.фильтр js с несколькими аргументами?
Безуспешно.
Я создал плунжер, где мы можем видеть, как фильтр работает правильно, когда я использую его в качестве выражения, поэтому, вероятно, проблема заключается в отправке значений внутри ng-repeat заявление.
Вот плунжер: http://plnkr.co/edit/IGvDBq?p=preview
Спасибо, что уделили мне время
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)>