长时间潜伏,第一次海报。真的很喜欢你在这里拥有的社区:)
对这个问题没问题。目标是通过将2个参数传递给过滤器来过滤ng-repeat。
我有一个嵌套的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"
只有床被传递,但月份未定义
我不知道我做错了什么,如果任何人能指出我正确的方向,我会非常感激。
答案 0 :(得分: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