使用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 相关文章推荐
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 Javascript
javascript对select标签的控制(option选项/select)
Jan 31 Javascript
jquery.ui.draggable中文文档(原文翻译)
Nov 15 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
Mar 23 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
Mar 16 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
Aug 01 Javascript
JSON.stringify()方法讲解
Jan 31 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
Nov 16 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 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
DSP接收机前端设想
2021/03/02 无线电
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
PHP多文件上传类实例
2015/03/07 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
JavaScript 基础篇(一)
2012/03/30 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
Python标准库之循环器(itertools)介绍
2014/11/25 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
卫生标语大全
2014/06/21 职场文书
移交协议书
2014/08/19 职场文书
公司承诺书格式范文
2015/04/28 职场文书
党小组意见范文
2015/06/08 职场文书
python flask框架快速入门
2021/05/14 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers