🅰️
AngularJSのインスタンスはどこにあるか
AngularJSはシングルトンでありながらDIを使って各Moduleや各Providerが独立して動作しています。そんなAngularJSのインスタンスは、ブラウザ上での動作中にどこにあるのかと思い調べてみるとwindow
直下にはいませんでした。
本体のソースコードを順番に読みながら辿っていると、実はjQueryでDOMを読んでいるだけということが分かり拍子抜け。
$('body').data().$scope;
実はこれだけでOK。でもこれはプロパティを直接覗いて行儀が悪いので、以下の方がいいか。
angular.element('body').scope();
なんにせよ、デバッグ以外で何かを参照、取得するのに使うべきではありません。
(AngularJS外のソースで$scope
を取得して$apply()
する力技も有るっちゃ有るみたいですが、個人的にはServiceを作って中で操作したい。)
Discussion