2014-11-03 26 views
3

我正在設計從ajax讀取數據和列的通用表。 在列中描述也是角度應該用於特定列的過濾器名稱。 但在HTML模板中,我無法使用過濾器名稱的變量:/ 有沒有解決方案?或者,我應該編碼與數據源的JavaScript循環?角度過濾器名稱作爲變量

下面是代碼示例:

<tr ng-repeat="item in data"> 
    <td ng-repeat="col in cols"> 
     {{item[col.source]}} 
     <span ng-if="col.ngFilter"> 
      {{col.ngFilter}} // ex. "state" filter 
      {{item[col.source]|col.ngFilter}} //is not working - is looking for "col.ngFilter" not "state" filter. 
     </span> 
    </td> 
</tr> 

回答

7

你不能做到這一點在你的HTML。首先,您需要在控制器中應用過濾器。

function MyCtrl($scope, $filter) { 

    $scope.applyFilter = function(model, filter) { 
     return $filter(filter)(model); 
    }; 

} 

然後,在你的HTML:

而不是

{{item[col.source]|col.ngFilter}} 

使用

{{applyFilter(item[col.source], col.ngFilter)}} 
+0

感謝響應 - 我把所有的過濾器在JavaScript HANDELING。 – piernik 2014-11-03 12:53:48

0

對於任何人都希望這樣做

{{applyFliter(item[col.source], col.ngFilter)}} 

其中ngFilter威力包含一些冒號分隔參數,如

currency:"USD$":0 

我結束了寫這個小幫手

function applyFilter (model, filter){ 
    if(filter){ 

     var pieces = filter.split(':'); 

     var filterName = pieces[0]; 

     var params = [model]; 

     if(pieces.length>1){ 
      params = params.concat(pieces.slice(1)); 
     } 

     return $filter(filterName).apply(this,params); 
    }else{ 
     return model; 
    } 
}