0

我为 ng-repaet 制作了如下所示的过滤器:

  $scope.filterRoutine = function(col) {
        return _.isEqual(col.Routine.IsIndoor, true);
}

它工作正常(isEqual 返回真或假)。

但这不起作用,我不知道为什么会这样(当我说它不起作用时,我没有收到任何错误,但视图没有改变)

 $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 中的任何项目的列?

4

1 回答 1

1

_.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

于 2013-09-15T12:32:44.787 回答