传递ng-repeat变量未定义

问题描述:

我正在尝试使用ng-repeat在Angular中使用自定义过滤器。问题是我的数据没有正确传递。传递ng-repeat变量未定义

我的HTML:

<div class="card" ng-repeat="acqui in acquis | orderBy:'date':true | fieldFilter: this"> 

我的过滤器:

.filter('fieldFilter', function() { 
    return function(acqui, $scope) { 
     if($scope.fieldFilter.length > 0) { 
      console.log($scope.fieldFilter); 
      for(let i = 0; i < $scope.fieldFilter.length; i++) { 
       if(acqui.field === $scope.fieldFilter[i]) { 
        return acqui; 
       } 
      } 
     } else { 
      return acqui; 
     } 
    } 
}); 

我试图从NG-重复到$范围变量比较阿奎,但由于某种原因acqui.field是不确定的,尽管我确信它很简单,但我对于尝试尝试的方式确实感到不知所措。

您不能将整个$scope传递给您的角度过滤器(尽管这只是想法不好的方法)。您可以通过在过滤器名称后面提及它来传递过滤对象。

ng-repeat="acqui in acquis | orderBy:'date':true | fieldFilter: fieldFilter" 

过滤

.filter('fieldFilter', function() { 
    //fieldFilter will have passed `fieldFilter` object from `$scope` 
    //where as `acquis` is an array. 
    return function(acquis, fieldFilter) { 
     if(fieldFilter.length > 0) { 
      console.log(fieldFilter); 
      for(let i = 0; i < fieldFilter.length; i++) { 
       //here you have `acquis` not acqui 
       //if(acqui.field === fieldFilter[i]) { 
       // return acqui; 
       //} 
      } 
     } else { 
      return acqui; 
     } 
    } 
}); 
+0

说干就干,所做的更改,只是因为它是更好的做法,但它并没有解决问题。 acqui是什么是undefined,而不是fieldFilter。 –

+0

@ Ryan-Llaver基本上你会得到'acquis'而不是'acqui' –

+0

现在我明白了,所以我将不得不通过acquis.length循环并检查每个acquis.acqui.field? –