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 相关文章推荐
在Javascript中为String对象添加trim,ltrim,rtrim方法
Sep 22 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
jQuery事件绑定.on()简要概述及应用
Feb 07 Javascript
js中return false(阻止)的用法
Aug 14 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
基于JavaScript获取鼠标位置的各种方法
Dec 16 Javascript
JS 对象(Object)和字符串(String)互转方法
May 20 Javascript
AngularJS 单元测试(一)详解
Sep 21 Javascript
H5实现中奖记录逐行滚动切换效果
Mar 13 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
Sep 07 Javascript
Vue2.0实现简单分页及跳转效果
Jul 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
我的群发邮件程序
2006/10/09 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
jquery attr 设定src中含有&(宏)符号问题的解决方法
2011/07/26 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
小程序实现多选框功能
2018/10/30 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
python解析文件示例
2014/01/23 Python
Python对数据库操作
2016/03/28 Python
Python内建模块struct实例详解
2018/02/02 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
pybind11在Windows下的使用教程
2019/07/04 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
代码中finally中的代码会不会执行
2012/02/06 面试题
药学专业毕业生求职信
2013/10/20 职场文书
光盘行动倡议书
2014/02/02 职场文书
工程承诺书怎么写
2014/05/24 职场文书
庆七一活动总结
2014/08/27 职场文书
法人单位授权委托书范文
2014/10/06 职场文书