我为ng-repaet制作了过滤器,如下所示:
$scope.filterRoutine = function(col) {
return _.isEqual(col.Routine.IsIndoor, true);
}
它工作正常(isEqual返回true或false)。
但这不起作用,我不知道为什么(当我说它不起作用时,我没有得到任何错误,但是视图没有改变)
$scope.filterRoutine = function(col) {
return _.forEach(tempData, function (temp) {
if (_.find(col.Exercises, { Exercise: temp })) {
return true;
} else {
return false;
}
});
}
我在这里(或者更确切地说我想做的)是这样的:我有tempData集合,如果我的col.Exercises至少有一个来自tempData的项目,它应该在视图中显示。 但由于某些原因,所有项目都显示在视图中,即没有任何过滤。
我的猜测是因为这个函数总是返回true(因为至少有一个col.Exercises应该包含来自tempData的项目)。
如何修复此问题,即隐藏所有不包含tempData项目的cols?
答案 0 :(得分:2)
从_.forEach返回并不符合您的预期。 你需要做这样的事情:
$scope.filterRoutine = function(col) {
var x = false;
_.forEach(tempData, function (temp) {
if (_.find(col.Exercises, { Exercise: temp })) {
x = true;
}
});
return x
}
此外,“回调可以通过显式返回false来提前退出迭代。”,这意味着您的return false
在第一次_.find
返回false
后停止了迭代。