【问题标题】:Angularjs filter always returns trueAngularjs 过滤器总是返回 true
【发布时间】:2013-09-15 12:24:11
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs angularjs-filter


    【解决方案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 后停止迭代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2017-05-10
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多