使用Chrome浏览器调试AngularJS应用的方法


Posted in Javascript onJune 18, 2015

当我们构建AngularJS应用时,通过浏览器(如Chrome,Firefox和IE)的JavaScript控制台访问应用中隐藏的数据和服务总会有些困难。下面是一些简单的技巧可以帮助我们通过Javascript控制台来查看或者控制正在运行的Angular应用,使得应用可以比较容易进行测试,修改,甚至实时的修改我们的Angular应用:
1: 访问作用域

通过一行简单的JS程序访问页面中任何作用域(甚至是隔离的作用域!):
 

> angular.element(targetNode).scope()
-> ChildScope {$id: "005", this: ChildScope, $$listeners: Object, $$listenerCount: Object, $parent: Scope…}

对于隔离作用域:

> angular.element(targetNode).isolateScope()
-> Scope {$id: "009", $$childTail: ChildScope, $$childHead: ChildScope, $$prevSibling: ChildScope, $$nextSibling: Scope…}

这里用`targetNode`作为HTML节点的引用。你可以非常轻松的通过`document.querySelector()`来创建一个`targetNode`

2:查看作用域树

有些时候,我们需要查看页面中作用域层次来有效的调试我们的应用。AngularJS Batarang正是我们需要的一款Chrome浏览器的扩展,可以展示当前作用域层次,并具有其他非常有用的特性。

使用Chrome浏览器调试AngularJS应用的方法

3: 抓取任何服务

无论ngApp在哪里定义,我们都可以使用注入器功能来抓取任何的服务的引用(如果使用angular的bootstrap方法,则可以手动抓取$rootElement):
 

> angular.element('html').injector().get('MyService')
-> Object {undo: function, redo: function, _pushAction: function, newDocument: function, init: function…}

然后我们就可以对该服务进行调用,就像我们可以将服务注入一样。

4: 访问控制器使用指令

一些指令定义了一个拥有某些额外(通常是分享)功能的控制器。为了从控制台访问一个给定指令的控制器实例,只需使用 controller() 方法:

> angular.element('my-pages').controller()
-> Constructor {}

最后一种做法更高级并且不常用。
5: Chrome 控制台特性

Chrome浏览器的控制台有一堆不错的捷径 来调试浏览器应用。这是一些Angular开发中最好的做法:

  •     $0-$4: 访问最近在查看窗口中进行选取的 5 个DOM元素。选择抓取的范围非常方便。
  •     $(selector)和$$(selector): 分别是querySelector() 和 querySelectorAll的一个快速的替代

感谢 @zgohr 提供这种方法!

结论

通过几个简单的技巧,我们可以访问页面任何作用域中的数据,查看作用域层次结构,注入服务和控制指令。

所以下一次,如果你想稍微进行调整,检查自己的工作或者通过控制台控制AngularJS一个用,我希望你能记住这些命令,并且能做到像我一样觉得他们非常实用!

Javascript 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
jquery中one()方法的用法实例
Jan 16 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 Javascript
教你如何终止JQUERY的$.AJAX请求
Feb 23 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
canvas绘制多边形
Feb 24 Javascript
JS实现移动端按首字母检索城市列表附源码下载
Jul 05 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
vue设置默认首页的操作
Aug 12 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 #Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 #Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 #Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 #Javascript
使用AngularJS对路由进行安全性处理的方法
Jun 18 #Javascript
浅谈Node.js中的定时器
Jun 18 #Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 #Javascript
You might like
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
php中使用sftp教程
2015/03/30 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python构建自定义回调函数详解
2017/06/20 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
村干部承诺书
2014/03/28 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
县级文明单位申报材料
2014/05/23 职场文书
运动会的口号
2014/06/09 职场文书
老员工辞职信范文
2015/05/12 职场文书
预备党员介绍人意见
2015/06/01 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python