3 回答
TA贡献1865条经验 获得超7个赞
$eval而且$parse不要评估JavaScript;他们评估AngularJS 表达式。链接的文档解释了表达式和JavaScript之间的区别。
问:$ eval到底在做什么?为什么需要自己的小型解析语言?
从文档:
表达式是类似于JavaScript的代码段,通常放置在诸如{{expression}}之类的绑定中。表达式由$ parse服务处理。
这是一种类似于JavaScript的迷你语言,它限制了您可以运行的内容(例如,除了三元运算符之外,没有控制流语句),并且增加了一些AngularJS的优点(例如,过滤器)。
问:为什么不使用普通的旧javascript“ eval”?
因为它实际上不是在评估JavaScript。正如文档所说:
如果您确实想运行任意JavaScript代码,则应将其设为控制器方法并调用该方法。如果要从JavaScript评估角度表达式,请使用$ eval()方法。
上面链接的文档有更多信息。
TA贡献1868条经验 获得超4个赞
从测试来看
it('should allow passing locals to the expression', inject(function($rootScope) {
expect($rootScope.$eval('a+1', {a: 2})).toBe(3);
$rootScope.$eval(function(scope, locals) {
scope.c = locals.b + 4;
}, {b: 3});
expect($rootScope.c).toBe(7);
}));
我们还可以通过本地人进行评估表达。
TA贡献1816条经验 获得超4个赞
我认为这里没有回答原始问题之一。我认为不使用香草eval(),因为角度应用程序将无法像Chrome应用程序一样工作,这出于安全原因明显阻止了eval()的使用。
- 3 回答
- 0 关注
- 883 浏览
添加回答
举报