使用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浏览器IFrame对象内存不释放问题解决方法
Aug 22 Javascript
js显示文本框提示文字的方法
May 07 Javascript
Bootstrap布局方式详解
May 27 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
Ajax和Comet技术总结
Feb 19 Javascript
js实现简单的二级联动效果
Mar 09 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 Javascript
Vue自定义多选组件使用详解
Sep 08 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 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
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
项目实践之javascript技巧
2007/12/06 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
JS的get和set使用示例
2014/02/20 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Python如何调用外部系统命令
2019/08/07 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
节能减排倡议书
2014/04/15 职场文书
中秋晚会策划方案
2014/06/12 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL