我想在Chrome的JavaScript控制台中访问我的$scope
变量。我该怎么做?
在控制台中,我既看不到$scope
,也看不到我的模块的名称myapp
作为变量。
在开发人员工具的HTML面板中选择一个元素,并在控制台中键入以下内容:
angular.element($0).scope()
在WebKit和Firefox中,$0
是对elements选项卡中所选DOM节点的引用,因此通过这样做,您可以在控制台中打印出所选DOM节点范围。
您还可以通过元素ID将作用域作为目标,如下所示:
angular.element(document.getElementById('yourElementId')).scope()
增编/扩展
有一些非常有用的Chrome扩展,您可能想要查看一下:
>
Batarang。这已经有一段时间了。
NG-督察。这是最新的一个,顾名思义,它允许您检查应用程序的作用域。
玩jsFiddle
使用jsfiddle时,可以在显示模式下通过在URL末尾添加/show
打开fiddle。这样运行时,您可以访问angular
全局。你可以在这里试试:
http://jsfiddle.net/jaimem/yatbt/show
jQuery Lite
如果在AngularJS之前加载jQuery,则可以向Angular.element
传递一个jQuery选择器。因此您可以使用
angular.element('[ng-controller=ctrl]').scope()
指按钮
angular.element('button:eq(1)').scope()
。。。等等。
实际上,您可能希望使用全局函数来使其更容易:
window.SC = function(selector){
return angular.element(selector).scope();
};
现在你可以这么做了
SC('button:eq(10)')
SC('button:eq(10)').row // -> value of scope.row
请查看:http://jsfiddle.net/jaimem/dvrar/1/show/
为了改进JM的回答。。。
// Access whole scope
angular.element(myDomElement).scope();
// Access and change variable in scope
angular.element(myDomElement).scope().myVar = 5;
angular.element(myDomElement).scope().myArray.push(newItem);
// Update page to reflect changed variables
angular.element(myDomElement).scope().$apply();
或者如果您使用jQuery,它也会做同样的事情。。。
$('#elementId').scope();
$('#elementId').scope().$apply();
从控制台访问DOM元素的另一种简单方法(正如jm提到的)是在'elements'选项卡中单击它,它会自动存储为$0
。
angular.element($0).scope();
如果您已经安装了Batarang
然后你可以写:
$scope
当你在Chrome的elements视图中选择了元素时。Ref-https://github.com/angular/angularjs-batarang#控制台