Angular.js: $eval はどのように機能し、バニラの eval となぜ違うのでしょうか? 質問する

Angular.js: $eval はどのように機能し、バニラの eval となぜ違うのでしょうか? 質問する

$scope.$evalディレクティブでよく見かけるについて興味があったので、ソースを調べたところ、 に次のような記述があるのを見つけましたrootScope.js

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

$parseParseProviderはで定義されているようですparse.jsが、独自のミニ構文を定義しているようです (ファイルの長さは 900 行です)。

私の質問は次のとおりです:

  1. 正確には何$evalをしていますか? なぜ独自のミニ解析言語が必要なのでしょうか?

  2. なぜ昔ながらの JavaScriptevalが使用されていないのでしょうか?

ベストアンサー1

$eval$parseJavaScriptを評価するのではなく、AngularJSを評価する表現リンク先のドキュメントでは、式と JavaScript の違いについて説明しています。

Q: $eval は具体的に何をしているのですか? 独自のミニ解析言語が必要なのはなぜですか?

ドキュメントより:

式は、通常 {{ expression }} などのバインディングに配置される JavaScript のようなコード スニペットです。式は $parse サービスによって処理されます。

これは JavaScript のようなミニ言語で、実行できる内容が制限される (例: 三項演算子を除く制御フロー ステートメントがない) とともに、AngularJS の優れた機能 (フィルターなど) が追加されます。

Q: 昔ながらの単純な JavaScript の「eval」が使用されていないのはなぜですか?

実際には JavaScript を評価していないからです。ドキュメントには次のように書かれています:

任意の JavaScript コードを実行したい場合は、それをコントローラー メソッドにしてメソッドを呼び出す必要があります。JavaScript から Angular 式を eval() する場合は、$eval() メソッドを使用します。

上にリンクされているドキュメントには、さらに多くの情報が記載されています。

おすすめ記事