如何使用$ eval将字符串传递给obj - Angular

时间:2015-01-27 18:38:06

标签: javascript angularjs

我有这个字符串:

"var config={general:{instance:'livedemo'}};"    

我想基于该字符串创建一个对象,

问题是使用普通的JS eval函数一切都很好, 但是使用$ eval我得到“ReferenceError:config is not defined”和angular只允许我在控制器上使用$ eval。

有人知道我该怎么办?

由于

2 个答案:

答案 0 :(得分:0)

Angular的$eval不是用于评估任何javascript表达式而是用于表达角度表达式,即通常是您在HTML中写入的内容,例如{{expression}}

现在一切都取决于你要评估的字符串来自哪里。如果您完全控制它,可以执行eval。但是,如果您不确定它是否安全,可以尝试解析它。

如果您在{}中的字符串是正确的JSON,即:{"general": {"instance": "livedemo"}},那么您可以:

var s = "var config={general:{instance:'livedemo'}};"
var m = s.match(/var (.*)=({.*})/);
var varname = m[1];          // "config"
var data = JSON.parse(m[2]); // {general: ...}

答案 1 :(得分:0)

这个问题可能有你的答案,Angular.js: How does $eval work and why is it different from vanilla eval?

  

$ eval和$ parse不评估JavaScript;他们评估AngularJS expressions。链接的文档解释了表达式和JavaScript之间的差异。

我在链接页面上尝试了angularjs 1.0.8+的表达式计算器。它没有任何例外,它正在工作。如果您想在范围内的密钥配置中设置一些数据,即scope.config,则可以放弃关键字var

"config={general:{instance:'livedemo'}}"