我正在设计从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>
答案 0 :(得分: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)}}
答案 1 :(得分: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;
}
}