我有这个字符串:
"var config={general:{instance:'livedemo'}};"
我想基于该字符串创建一个对象,
问题是使用普通的JS eval函数一切都很好, 但是使用$ eval我得到“ReferenceError:config is not defined”和angular只允许我在控制器上使用$ eval。
有人知道我该怎么办?
由于
答案 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'}}"