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 相关文章推荐
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
jQuery遍历对象、数组、集合实例
Nov 08 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
详解JavaScript中基于原型prototype的继承特性
May 05 Javascript
Bootstrap页面标题Page Header的实现方法
Mar 22 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
IntersectionObserver实现图片懒加载的示例
Sep 29 Javascript
详解TypeScript的基础类型
Feb 18 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下mysql数据库操作类(改自discuz)
2010/07/03 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
PHP安全配置详细说明
2011/09/26 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
Python变量访问权限控制详解
2019/06/29 Python
浅谈python3中input输入的使用
2019/08/02 Python
python中format函数如何使用
2020/06/22 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
机关节能减排实施方案
2014/03/17 职场文书
项目负责人任命书
2014/06/04 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
个人工作能力自我评价
2015/03/05 职场文书
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技