我想使用带有ng-repeat的过滤器。 不幸的是,它似乎忽略了附加到过滤器的函数的结果。
HTML:
<a ng-repeat="item in date track by $index | filter: filterFunction('2015-09-23',item)" class="item item-icon-left" >
<div class="listcontent">{{title[$index]}}
<br> <span class="subinfo">{{item}}</span>
</div>
<i class="iconarrowmore ion-chevron-right"></i>
</a>
JS:
$scope.filterFunction = function (datestamp, element) {
if (datestamp == element) {
console.log(datestamp == element);
return true;
} else {
console.log(datestamp == element);
return false;
}
};
当我使用console.log调试它时,它返回true或false,但每个项目仍然出现在列表中。
我真的不知道为什么这样做。
答案 0 :(得分:1)
您的过滤功能为undefined
。请注意,使用filter: filterFunction('2015-09-23',item)
时,您会立即执行filterFunction
并将其结果用作过滤器,即undefined
,因为您的函数不会返回任何内容。
要解决此问题,请filterFunction
返回新的过滤功能:
$scope.filterFunction = function(datestamp) {
return function(element) {
return datestamp == element;
};
};
然后HTML部分将是相同的,只是您不需要传递项目:
ng-repeat="item in date track by $index | filter: filterFunction('2015-09-23')"
答案 1 :(得分:1)
好的,我找到了解决方案。
如果一个人使用“按索引追踪”并使用过滤器,则必须使用过滤器后面的过滤器:
ng-repeat="item in date | filter: filterFunction('2015-09-23') track by $index"
我希望能有所帮助。
干杯, 瓦伦丁