在angular.js中,我可以在I $ eval()之前过滤一些东西吗?

时间:2014-10-22 02:40:01

标签: javascript angularjs

我使用Angular.js作为网络应用。我有一些我想要$eval()的数据,但问题是在我这样做之前,我需要用字符串中的占位符替换我使用的变量的名称。我编写了一个过滤器来处理这个问题,但是在将字符串传递给$eval()之前,我无法弄清楚如何运行过滤器。

以下是我想要发生的事情的一个例子:

app.js

$scope.newVariable=3;
$scope.test='2+[placeholder]';

的index.html

<p>{{$eval(test|replace:'[placeholder]':'newVariable')}}</p>

我想要发生的是[&#39; [占位符]&#39;由&new;新变种&#39;替换为'newVariable&#39;然后将该新字符串传递给$eval()。它现在的编写方式,当我加载页面时页面崩溃。我已经分别测试过滤器了,所以我知道这不是问题所在。有没有办法在字符串$eval()编辑之前应用此过滤器?

1 个答案:

答案 0 :(得分:2)

首先,应在必须指定的范围上调用$eval

由于过滤器可以在Angular中轻松链接,因此您可以尝试创建一个额外的过滤器,对已替换的表达式执行评估,然后显示它。

例如,您的过滤器定义可能如下所示:

.filter('eval', function() {
    return function(expr, scope) {
        // Note how $eval is called for the passed in scope.
        return scope.$eval(expr);
    }
})

然后在你的HTML中:

{{ test | replace:'[placeholder]':'newVariable' | eval:this }}

请注意,提供给this过滤器的eval应该是控制器的$scope