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使用手册之二 DOM操作
Mar 24 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
Jan 02 Javascript
Node.js 制作实时多人游戏框架
Jan 08 Javascript
js点击选择文本的方法
Feb 09 Javascript
javascript中offset、client、scroll的属性总结
Aug 13 Javascript
JavaScript数组实现数据结构中的队列与堆栈
May 26 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
JavaScript实现移动端轮播效果
Jun 06 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
Apr 25 Javascript
脚手架vue-cli工程webpack的基本用法详解
Sep 29 Javascript
详解如何用webpack4从零开始构建react开发环境
Jan 27 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
杏林同学录(六)
2006/10/09 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
JS判断不能为空实例代码
2013/11/26 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
Python max内置函数详细介绍
2016/11/17 Python
Python编程实现正则删除命令功能
2017/08/30 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
python定位xpath 节点位置的方法
2019/08/27 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
中秋节主持词
2014/04/02 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
SQL Server Agent 服务无法启动
2022/04/20 SQL Server
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python