фильтр по повтору по функции

0

Я хотел бы выполнить итерацию по массиву с помощью ng-repeat и фильтровать содержащиеся объекты в зависимости от свойства функции. Plunker

Это означает, что у меня есть такой объект:

vm.show1 = function(){
  return true;
};    
var object1 = {label: 'Object1', show: vm.show1};

и хотел бы отфильтровать его примерно так:

<div ng-repeat="object in ctrl.objects | filter:{show:true}">{{object.label}}</div>

Очевидно, что в приведенном выше примере vm.show1 является функцией (и, следовательно, не true). Есть ли способ заставить фильтр вызывать функцию и оценивать результат или мне нужно написать собственный фильтр?

Изменение: Это вообще возможно? Если угловое устройство не обрабатывает грязную проверку коробки, фильтр не будет знать, когда нужно переоценить функцию.

  • 0
    Итак, вы хотите выполнить функцию для каждого объекта и посмотреть, должен ли он быть видимым или нет?
  • 0
    да в принципе это все. Я хочу разместить (более или менее) сложные операторы внутри функции и заставить ng-repeat искать результат этой функции. Получившееся представление должно быть таким же, как если бы я перечислял элементы вручную и упаковывал каждый из них в блок ng-if с такой функцией.
Показать ещё 2 комментария
Теги:
filter

1 ответ

1
Лучший ответ

Я думаю, что лучший способ сделать это - с помощью специальной функции фильтра:

$scope.filterFn = function(object)
{
    //if true, rendered in ng-repeat
    //if false, not rendered in ng-repeat
    return object.show1(); 
};

<div ng-repeat="object in ctrl.objects | filter:filterFn">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню