2

长时间潜伏者,第一次海报。真的很喜欢你在这里的社区:)AngularJS嵌套ng-repeat过滤器多参数

好的正确的问题。目标是通过将2个参数传递给过滤器来过滤ng-repeat。

我有一个嵌套的ng重复和第二个重复我需要筛选条目取决于他们的生命期是否在当前月份。

我以前用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可以指向我在正确的方向。

回答

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