2014-10-22 70 views
1

我正在使用Angular.js作为一个web应用程序。我有一些数据我想$eval(),但问题是,在我这样做之前,我需要用字符串中的占位符替换我使用的变量的名称。我写了一个过滤器来处理,但我不知道如何在字符串传递到$eval()之前运行过滤器。

这里是想什么我发生的例子:

app.js

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

的index.html

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

我希望发生的是“[占位符]'替换为'newVariable',然后将该新字符串传递给$eval()。现在写入的方式,页面在加载时崩溃。我已经单独测试过滤器,所以我知道这不是问题。有没有办法在字符串$eval() ed之前应用此过滤器?

回答

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 }} 

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

相关问题