角度过滤器名称为变量

时间:2014-11-03 08:38:40

标签: angularjs filter

我正在设计从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>

2 个答案:

答案 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;
    }
}
相关问题