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 ready(fn)事件使用介绍
Aug 21 Javascript
javascript 上下banner替换具体实现
Nov 14 Javascript
javascript作用域和闭包使用详解
Apr 25 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
理解JavaScript原型链
Oct 25 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
Apr 13 Javascript
详解Vue demo实现商品列表的展示
May 07 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
layer 刷新某个页面的实现方法
Sep 05 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
php email邮箱正则
2008/10/08 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
python实现密码强度校验
2020/03/18 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
仓库理货员岗位职责
2013/12/18 职场文书
项目开发计划书
2014/01/09 职场文书
校园演讲稿汇总
2014/05/21 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
债务授权委托书范本
2014/10/17 职场文书
员工工作表扬信
2015/05/05 职场文书
党支部鉴定意见
2015/06/02 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA