Angularjs过滤器始终返回true

时间:2013-09-15 12:24:11

标签: javascript angularjs angularjs-filter

我为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?

1 个答案:

答案 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后停止了迭代。