angularjs - Angular.js : How does $eval work and why is it different from vanilla eval?

标签 angularjs

我对指令中经常看到的 $scope.$eval 感到好奇,因此我检查了源代码并在 rootScope.js 中找到了以下内容:

  $eval: function(expr, locals) {
    return $parse(expr)(this, locals);
  },

$parse 似乎是由 parse.js 中的 ParseProvider 定义的,它似乎定义了自己的某种迷你语法(该文件有 900 行长)。

我的问题是:

  1. $eval 到底在做什么?为什么它需要自己的迷你解析语言?

  2. 为什么不使用普通的旧式 JavaScript eval

最佳答案

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

问:$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.

上面链接的文档包含更多信息。

关于angularjs - Angular.js : How does $eval work and why is it different from vanilla eval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671471/

相关文章:

ios - App review - 指向 dev api 而不是 prod

php - AngularJS 和 Codeigniter - 组合和数据传输

jquery - Umbraco7 新后台部分,编辑日期字段,AngularJS

angularjs - Ionic2 - 以编程方式滚动 ionic 滚动

javascript - ng-options 删除所选选项后,如何保持 ng-model 与选择元素同步

javascript - 在 Div 上拖动时禁用 ng-Click

json - Laravel $ request-> expectsJson()

javascript - 我怎样才能为结束播放声音创造一个 promise ?

javascript - 如何从 mongodb 获取值到 angularjs Controller

javascript - 以 ng-style 获取当前日期-Angularjs