使用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 相关文章推荐
通过Jquery遍历Json的两种数据结构的实现代码
Jan 19 Javascript
使用js简单实现了tree树菜单
Nov 20 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
javascript实现查找数组中最大值方法汇总
Feb 13 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
详解JavaScript中this的指向问题
Jan 20 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
babel的使用及安装配置教程
Feb 22 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
微信小程序 生成携带参数的二维码
Oct 23 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
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
Bootstrap插件全集
2016/07/18 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
python调用摄像头显示图像的实例
2018/08/03 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Python上下文管理器全实例详解
2019/11/12 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
动态密码技术
2012/10/18 面试题
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
出生公证委托书
2014/04/03 职场文书
实习推荐信
2014/05/10 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS
关于Redis的主从复制及哨兵问题
2022/06/16 Redis