使用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 相关文章推荐
js的with语句使用方法
Sep 21 Javascript
javascript模仿msgbox提示效果代码
Jun 10 Javascript
json 定义
Jun 10 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
jQuery ctrl+Enter shift+Enter实现代码
Feb 07 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
Oct 26 Javascript
jQuery UI的Dialog无法提交问题的解决方法
Jan 11 Javascript
jquery cookie实现的简单换肤功能适合小网站
Aug 25 Javascript
Extjs根据条件设置表格某行背景色示例
Jul 23 Javascript
Javascript URI 解析介绍
Mar 15 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php 伪静态之IIS篇
2014/06/02 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
PHP常用的三种设计模式
2017/02/17 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
分享几个超级震憾的图片特效
2012/01/08 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
python k-近邻算法实例分享
2014/06/11 Python
django实现分页的方法
2015/05/26 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
浅谈python写入大量文件的问题
2018/11/09 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
Python目录和文件处理总结详解
2019/09/02 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
班组长工作职责
2013/12/25 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
安全生产奖惩制度
2015/08/06 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis