[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
質問
について気になったので
$scope.$eval
ディレクティブでよく見かけるので、ソースをチェックしてみると、以下のように
rootScope.js
:
$eval: function(expr, locals) {
return $parse(expr)(this, locals);
},
$parse
で定義されているように見える。
ParseProvider
で
parse.js
は、それ自体がある種のミニ構文を定義しているように見えます(ファイルは900行に及びます)。
私の疑問は
-
とは、具体的にどのようなものなのでしょうか?
$eval
は何をしているのか? なぜ独自のミニ解析言語が必要なのでしょうか? -
なぜ古いJavaScriptではダメなのか?
eval
が使われているのでしょうか?
解決方法は?
$eval
と
$parse
はJavaScriptを評価するのではなく、AngularJSを評価します。
表現
. リンク先のドキュメントでは、式とJavaScriptの違いについて説明しています。
Q: $evalはいったい何をしているのですか?なぜ独自のミニ解析言語が必要なのですか?
ドキュメントより
式はJavaScriptのようなコードスニペットで、通常{{式 }}のようなバインディングに置かれます。式は $parse サービスによって処理されます。
これはJavaScriptのようなミニ言語で、実行できるものを制限し(例えば三項演算子以外の制御フロー文は不可)、さらにAngularJSの良さ(例えばフィルター)を追加しています。
Q: なぜ古いjavascript "eval"は使われないのですか?
なぜなら、実際にJavaScriptを評価しているわけではないからです。ドキュメントに書いてある通りです。
もし、任意のJavaScriptコードを実行したいのであれば、それをコントローラのメソッドにして、メソッドを呼び出す必要があります。もし、JavaScriptからangular式をeval()したい場合は、$eval()メソッドを使用してください。
上記リンク先のドキュメントには、より多くの情報が掲載されています。
関連
-
[解決済み] `ui-router` $stateParams vs. $state.params
-
[解決済み] ページロード時にAngularJSのコントローラ関数を実行する方法は?
-
[解決済み] エラーです。10回の$digest()反復に達しました。動的なsortby述語で中断!?
-
[解決済み] AngularJSの「href」と「ng-href」の違いについて
-
AngularJSのベストプラクティス。ng-repeatの$indexに注意する。
-
AngularJS がエラー $digest already in progress を報告する
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング
-
[解決済み] AngularJSとjQueryの違いについて
-
[解決済み] [Solved] Angular.jsで異なる環境を設定するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】npm UNMET PEER DEPENDENCYの警告を修正するにはどうすればいいですか?
-
[解決済み] AngularJSのグローバル変数
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
[解決済み] ng-repeat内で$indexを使用して、クラスを有効にしてDIVを表示するにはどうすればよいですか?
-
[解決済み] AngularJSのリソースプロミス
-
AngularJSのベストプラクティス。ng-repeatの$indexに注意する。
-
[解決済み] AngularJs .$setPristineでフォームをリセットする
-
[解決済み] Jasmineの "callThrough "と "callFake() "の実用的な例が欲しい
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] カスタムディレクティブの中で評価された属性を取得する方法