使用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 相关文章推荐
50个比较实用jQuery代码段
Sep 18 Javascript
Jquery为单选框checkbox绑定单击click事件
Dec 18 Javascript
jQuery Password Validation密码验证
Dec 30 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
vue 项目常用加载器及配置详解
Jan 22 Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
原生js实现二级联动菜单
Nov 27 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 Javascript
React自定义hook的方法
Jun 25 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
优秀研究生自我鉴定
2013/12/04 职场文书
教师工作态度自我评价
2015/03/05 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
详解python网络进程
2021/06/15 Python
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python