2

долгое время lurker, впервые постер. На самом деле любите сообщество, которое у вас здесь есть :)AngularJS гнездо ng-repeat фильтр несколько параметров

Хорошо, что касается проблемы. Целью является фильтрация ng-repeat путем передачи 2 аргументов фильтру.

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

Я сделал это раньше с помощью ng-if, но так как я использую разные CSS для нечетных и четных строк, это приводит к нежелательным результатам.

соответствующий HTML часть:

<div class="col-md-12" ng-repeat="month in monthTable"> 
<div class="col-md-12"> 
    <h2> 
    <span>{{ month.start | amDateFormat:"MMMM" | uppercase}}</span> 
    </h2> 
</div> 
<div class="col-md-12"> 
    <div ng-class-even="'calendar_row_even'" ng-class-odd="'calendar_row_odd'" 
ng-repeat="bed in syncData.beds | filter: filterListItems(month, bed) | 
orderBy:'timeFrom'"> 
    // --> displays the unfiltered results for each month at the moment... 
    </div> 
</div> 
</div> 

monthTable используется для определения начала и концы месяца + генерировать имена уместна локали, он заполнен так:

for (var i = 0; i < 12; i++) { 
    $scope.monthTable.push({ 
    start: new Date(Date.UTC($scope.currentYear, i, 1)).getTime(), 
    end: new Date(Date.UTC($scope.currentYear, i+1, 1)).getTime() 
    }) 
}; 

Довольно до сих пор не объяснимо.

Теперь вот функция, которая «должна сделать» фильтрацию:

$scope.filterListItems = function (month, bed) { 
    console.log(month); 
    console.log(bed); 
    return true; 
    /*return (bed.timeFrom < month.end && bed.timeUntil >= month.start); 
--> this should be the code.*/ 
}; 

Проблема в том, что я не могу получить фильтр, чтобы получать 2 аргумента. Если я пишу этот путь:

"filter: filterListItems(month, bed)" 

месяц получает передается, но кровать неопределен

Если я пишу это так:

"filter: filterListItems:month:bed" 

только кровать пропускается на , но месяц не определен

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

ответ

1

Вы должны объявить метод как фильтр:

angular.module('yourApp') 
    .filter('filterListItems', filterListItems); 

И адаптировать свой метод, как следует:

function filterListItems() { 
    return function(items, month) { 
     // 'items' represent the objects listed by your ng-repeat 
     // Now, filter the items to return only items that respect your condition. 
     return items.filter(function(item) { 
      return (item.timeFrom < month.end && item.timeUntil >= month.start); 
     }); 
    } 
} 

И использовать это нравится:

ng-repeat="bed in syncData.beds | filterListItems:month 
+0

спасибо, я буду стараться что. – markok

+0

Добро пожаловать, спасибо за вашу оценку. – chalasr

Смежные вопросы