2016-08-17 56 views
2

我正在嘗試使用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是不確定的,儘管我確信它很簡單,但我對於嘗試嘗試的方式確實感到不知所措。

回答

2

您不能將整個$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? –