我正在使用Angular JavaScript进行概念验证。
如何在不同的浏览器(Firefox和Chrome)中调试Angular JavaScript代码?
我正在使用Angular JavaScript进行概念验证。
如何在不同的浏览器(Firefox和Chrome)中调试Angular JavaScript代码?
1. Chrome
要在Chrome中调试AngularJS,您可以使用AngularJS Batarang插件。(从最近的评论来看,似乎AngularJS Batarang不再得到维护。它经过了各种版本的Chrome测试,不起作用。)
以下是描述和演示的链接: 介绍 Angular JS Batarang
从这里下载Chrome插件:用于调试AngularJS的Chrome插件
您还可以使用ng-inspect来调试angular。
2. Firefox
对于Firefox,您可以使用Firebug帮助调试代码。
还可以使用此Firefox Add-Ons:AngScope:Firefox的Add-ons(非AngularJS团队官方扩展)
3.调试AngularJS
查看链接:调试AngularJS
在我看来,最令人沮丧的体验来自于获取/设置与视觉元素相关的特定作用域的值。我不仅在自己的代码中进行了大量的断点调试,还在angular.js本身中也做了很多尝试,但有时这并不是最有效的方法。尽管以下方法非常强大,但如果实际应用于生产代码中,则肯定被认为是不好的实践,所以要明智地使用它们!
在许多非IE浏览器中,您可以通过右键单击一个元素并单击“检查元素”来选择一个元素。或者,您也可以在Chrome的Elements选项卡中单击任何元素。最后选定的元素将存储在控制台中的变量$0
中。
这取决于是否存在创建隔离作用域的指令,您可以通过angular.element($0).scope()
或angular.element($0).isolateScope()
(如果启用了$,则使用$($0).scope()
)来检索作用域。这正是您在使用最新版本的Batarang时获得的内容。如果您直接更改值,请记得使用scope.$digest()
来反映UI上的更改。
对于调试而言不一定如此。scope.$eval(expression)
非常方便,当您想快速检查表达式是否具有预期值时可以使用。
scope.bla
和scope.$eval('bla')
之间的区别在于前者不考虑原型继承的值。使用下面的代码片段可以获得全貌(您不能直接更改该值,但无论如何都可以使用$eval
!)
scopeCopy = function (scope) {
var a = {};
for (x in scope){
if (scope.hasOwnProperty(x) &&
x.substring(0,1) !== '$' &&
x !== 'this') {
a[x] = angular.copy(scope[x])
}
}
return a
};
scopeEval = function (scope) {
if (scope.$parent === null) {
return hoho(scope)
} else {
return angular.extend({}, haha(scope.$parent), hoho(scope))
}
};
使用 scopeEval($($0).scope())
。
有时您编写指令时可能想要监视ngModel
中的值。使用$($0).controller('ngModel')
,您将可以检查$formatters
、$parsers
、$modelValue
、$viewValue
、$render
以及所有其他内容。
虽然问题已经得到了回答,但看一下ng-inspector可能会有趣。
不幸的是,大多数插件和浏览器扩展程序只能向您显示值,但它们不允许您编辑范围变量或运行Angular函数。如果您想在浏览器控制台(在所有浏览器中)更改$scope变量,则可以使用jQuery。如果在AngularJS之前加载jQuery,则可以将angular.element传递给jQuery选择器。因此,您可以使用以下方法检查控制器的作用域:
angular.element('[ng-controller="name of your controller"]').scope()
例子: 您需要更改$scope变量的值并在浏览器中查看结果,然后只需在浏览器控制台中键入:
angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();
scope.$apply()
。angular.element('[ng-controller="mycontroller"]').scope().var1;
debugger
调用。someFunction(){
debugger;
}
angular.reloadWithDebugInfo();
访问或重新加载您想要调试的页面,然后在浏览器中查看调试器。var rootEle = document.querySelector("html");
var ele = angular.element(rootEle);
scope() 我们可以通过在元素上使用scope()方法(或其父级)来获取$scope:
var scope = ele.scope();
injector()
var injector = ele.injector();
var service = {
user_id: null,
getCurrentUser: function() {
debugger; // Set the debugger inside
// this function
return service.user_id;
}
在浏览器中打开开发者工具并转到源代码选项卡。
使用Ctrl+P打开要调试的文件并搜索文件名
通过单击代码左侧添加断点。
刷新页面。