我很好奇$ scope,你经常在指令中看到,所以我检出了源代码,并在rootScope.js中找到以下内容:
$eval: function(expr,locals) { return $parse(expr)(this,locals); },
$ parse似乎是由parseProvider在parse.js中定义的,它似乎定义了一些它自己的小语法(该文件是900行长)。
我的问题是:
> $ eval是什么?为什么它需要自己的迷你解析语言?
>为什么不使用纯旧的JavaScript eval?
$ eval和$ parse不评估JavaScript;他们评估AngularJS
expressions.链接的文档解释表达式和JavaScript之间的差异。
原文链接:https://www.f2er.com/angularjs/147233.html问:$ eval究竟是什么?为什么它需要自己的迷你解析语言?
从文档:
Expressions are JavaScript-like code snippets that are usually placed in bindings such as {{ expression }}. Expressions are processed by $parse service.
它是一个类似JavaScript的微型语言,它限制了你可以运行的东西(例如没有控制流语句,除了三元运算符),以及添加一些AngularJS的好处(例如过滤器)。
问:为什么不使用纯旧的javascript“eval”?
因为它没有实际评估JavaScript。正如文件说:
If … you do want to run arbitrary JavaScript code,you should make it a controller method and call the method. If you want to eval() an angular expression from JavaScript,use the $eval() method.
链接到上面的文档有更多的信息。