AngularJS 如何在控制台进行错误调试


Posted in Javascript onJune 07, 2016

当我们在编写 AngularJS 的应用时,通过 Chrome, Firefox, 和 IE 的 JavaScript 控制台来获取隐藏在应用之中的数据(Data)和服务(Service) 是一件非常具有挑战性的工作。下面列出了一些简单的小窍门,可以帮助我们使用 Javascript 控制台来监视和控制一个正在运行的 Angular 应用,使其更加容易测试、修改甚至是实时的编写 Angular 应用。

1: 获取 Scopes (作用域)

我们可以使用一行 JS 代码来获取任何的 Scope (甚至是 isolated scopes) :

> angular.element(targetNode).scope()

-> ChildScope {$id: "005", this: ChildScope, $$listeners: Object, $$listenerCount: Object, $parent: Scope…}

或者获取 isolated scopes:

> angular.element(targetNode).isolateScope()

-> Scope {$id: "009", $$childTail: ChildScope, $$childHead: ChildScope, $$prevSibling: ChildScope, $$nextSibling: Scope…}

这里面的 targetNode 指的是 HTML Node(HTML节点)。你可以很容易的使用 document.querySelector() 来获取。

2: 监视 Scope Tree (作用域树)

为了更好的调试我们的应用,有些时候我们需要查看页面上的 Scope (作用域) 的结构师怎样的。这时候我们就需要使用 AngularJS
 Baratang 和 ng-inspector 这两个 Chrome 浏览器扩展来帮助我们实时查看 Scope (作用域) 的情况。并且,这两个扩展还有一些其他非常有用的功能。

    (1).AngularJS Baratang

AngularJS 如何在控制台进行错误调试

    (2).ng-inspector

AngularJS 如何在控制台进行错误调试

3: 抓取 Services (服务)

我们可以使用定义了 ngApp 元素的 injector 函数来抓取任何 Service (服务) 或者间接的通过任何带有 ng-scope class 的元素来获取 Service (服务)。

> angular.element(document.querySelector('html')).injector().get('MyService')

-> Object {undo: function, redo: function, _pushAction: function, newDocument: function, init: function…}

// Or slightly more generic

> angular.element(document.querySelector('.ng-scope')).injector().get('MyService')

接下来我们就可以使用相关的 Service 就像我们在程序中 injected(注入)过之后那样使用。

4: 从 directive 中获取 controller

有一些 directives (指令) 会将一些特定(通常是可以共用的)功能定义成为一个控制器。为了从控制台中获取一个指定 directive (指令) 的 controller (控制器) 示例, 我们只需要使用 controller() 函数。

> angular.element('my-pages').controller()

-> Constructor {}

最后一个不常用但是属于更高级的技巧。

5: Chrome Console(控制台) 特性

Chrome 有很多在 console (控制台) 中用于调试网页应用的非常好用的快捷命令。下面是对 Angular 开发最有帮助的一些命令:

    $0 - $4: 在 instpector window (监控器) 中获取最后的 5 个 DOM 元素。这个快捷方法可以非常方便的帮助我们来抓取选定元素的 scopes (作用域) : angular.element($0).scope()

    $(selector) 和 $$(selector): 可以方便的替代 querySelector() 和 querySelectorAll。

感谢 @zgohr 提供的这个小窍门!

总结

通过这些简单的小窍门,我们可以获取任意 scope (作用域) 中的数据、监控scope (作用域) 的层级、注入 services (服务) 并且 控制 directives (指令)。

所以下次,当你想要做一些微调、检查代码或者从控制台来控制一个 AngularJS 应用,我希望你能够像我一样记起这些小窍门并多加使用。

查看更多AngularJS的语法,大家可以关注:AngularJS 参考手册英文版,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
IE8 chrome中table隔行换色解决办法
Jul 09 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
Sep 08 Javascript
JQuery之focus函数使用介绍
Aug 20 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
Oct 24 Javascript
jquery 实现两级导航菜单附效果图
Mar 07 Javascript
微信支付如何实现内置浏览器的H5页面支付
Sep 25 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
在vue中实现简单页面逆传值的方法
Nov 27 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
Apr 09 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
Jun 29 Javascript
JQuery异步加载PartialView的方法
Jun 07 #Javascript
基于JS实现无缝滚动思路及代码分享
Jun 07 #Javascript
Bootstrap学习笔记之css样式设计(1)
Jun 07 #Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 #Javascript
PassWord输入框代码分享
Jun 07 #Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 #Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 #Javascript
You might like
一个更简单的无限级分类菜单代码
2007/01/16 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
python实现自动更换ip的方法
2015/05/05 Python
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python脚本调试工具安装过程
2021/01/11 Python
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
竞选演讲稿范文
2013/12/28 职场文书
十佳护士先进事迹
2014/05/08 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
水电施工员岗位职责
2015/04/11 职场文书
同乡会致辞
2015/07/30 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
代码解析React中setState同步和异步问题
2021/06/03 Javascript