2014-11-03 14 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

Спасибо за ответ - я ставлю все фильтры handeling в JavaScript. – piernik

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; 
    } 
} 
Смежные вопросы