AngularJS - 将过滤器从控制器传递到视图模板

时间:2014-06-19 07:22:51

标签: angularjs

在AngularJS过滤器中使用以下语法在视图模板中使用:

{{ expression | filter }}

表达式可以是控制器中定义的模型:

$scope.expression = 45

如何在变量中传递内置过滤器?这个表达不起作用:

$scope.filter = 'currency'

修改:我现在正在使用答案中稍加修改的功能。

控制器:

$scope.expression = 45;
$scope.filter = 'currency';

$scope.filterFn = function (value, filterName, filterArgs) {
    if (filterName)
        return $filter(filterName)(value, filterArgs);
    return value;
}

查看:

{{filterFn(expression, filter, args)}}

2 个答案:

答案 0 :(得分:2)

另一种解决方案,如果你想要动态过滤器名称,那就是创建一个过滤器,它将成为其他人的包装器:

app.filter('filterWrapper', function ($filter) {
    return function () {
        var input = arguments[0],
            name = arguments[1],
            args = [].slice.call(arguments, 2); //dirty hack, arguments are not Array
        return $filter(name)(input, args);
    }
})

在视图中使用:{{greeting | filterWrapper:filterName }}

结帐小提琴完整示例http://jsfiddle.net/Y9g4q/11/

答案 1 :(得分:1)

不是在视图中应用过滤器,而是可以直接在控制器中应用它,如下所示:

function YourController ($scope, $filter) {
    $scope.yourFilteredVar = $filter('currency')(45);
}

另外,您可以将过滤器函数保存为$ scope的属性并在视图中使用它:

function YourController ($scope, $filter) {
    $scope.filterFn = $filter('currency')
    $scope.yourVar =45;
}

观点:

<span>My Var: {{filterFn(yourVar)}}</span>