在控制台中调试 AngularJS 应用(译/改)

当我们在编写 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 (作用域)
的情况。并且,这两个扩展还有一些其他非常有用的功能。

  • AngularJS Baratang

  • ng-inspector

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 应用,我希望你能够像我一样记起这些小窍门并多加使用。

文章来源:http://ionicframework.com/blog/angularjs-console/。转载请注明出处。

翻译来自我的个人博客 http://lyfeyaj.com/2015/01/07/debugging-angularjs-apps-from-the-console/

时间: 2024-08-05 09:09:12

在控制台中调试 AngularJS 应用(译/改)的相关文章

转:在控制台中调试AngularJS应用

在控制台中调试AngularJS应用 在创建AngularJS应用时,一个很棘手的问题是如何在Chrome,Firefox,以及IE的JavaScript控制台中访问深藏在应用中的数据和服务.本文将会介绍一些如何从JavaScript控制台中监视和控制AngularJS应用的小技巧,来帮助你更加轻松的对AngularJS进行实时的测试修改. 1:访问作用域 我们可以使用一行简单的JS代码来访问任何作用域(甚至是独立的作用域): > angular.element(targetNode).scop

Chrome 开发者控制台中,你可能意想不到的功能

Chrome 有内置的开发者工具.它拥有丰富的特性,比如元素(Elements).网络(Network)和安全(Security).今天,我们主要关注一下 JavaScript 控制台. 当我最初写代码时,我只会使用JavaScript控制台来打印服务器返回值或变量值.但随着时间推移和教程的帮助,我发现这个控制台能做的事远远超乎我的想象. 接下来我们说说你可以通过控制台做到的事情.如果你在电脑的 Chrome 浏览器(或其他浏览器)中阅读这篇文章,你可以立刻打开开发者工具并尝试. 1. 选取DO

Jenkins控制台中乱码问题

由于服务器环境及应用层各版本的不同.编码方式的不同因此会有很多种情况会出现乱码问题. 由于Jenkins中的job运行的是独立的一个shell环境,许多的环境变量与服务器中是不一样的,因此在job中执行的命令也就会有所差异. 因此可以在job中执行env命令,同时在服务器中执行env命令查看环境的异同点. 对于Jenkins中乱码问题,首先,确保Jenkins的容器如Glassfish,Tomcat的编码是正确的,已设置成如UTF-8编码. 若还有乱码,做如下尝试: 系统管理--系统设置,添加编

C# 计算字符串在控制台中的显示长度

C# 计算字符串在控制台中的显示长度? 警告 您当前查看的页面是未经授权的转载! 如果当前版本排版错误,请前往查看最新版本:http://www.cnblogs.com/qin-nz/p/csharp-calculate-string-display-length.html 提示 更新时间:2016年01月09日. 本作品由勤奋的小孩创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可. 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接( http

百度 主页中在控制台中

try{ if(window.console&&window.console.log) {console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n 一位新人,要经历怎样的成长,才能站在技术之巅?\n 探寻这里的秘密:\n 体验这里的挑战:\n 成为这里的主人:\n 加入百度,加入网页搜索,你,可以影响世界.\n"); console.log("请将简历发送至 %c [email protected]( 邮件标题请以“姓名-应聘XX职位-来自

使用Yeoman,Grunt和Bower开发AngularJS(译)

使用Yeoman产生AngularJS的主要骨架 使用Grunt加速开发和帮助执行 使用Bower来加入第三方插件和框架--third party plugins/frameworks 一.准备工作 安装好NodeJS和NPM(读者可自己去google) 二.安装Yeoman, Grunt and Bower,产生AngularJS的主要骨架 2.1 新建一个目录,并进入该目录,执行 npm install -g yo grunt-cli bower 此时Yeoman,grunt和Bower就被

利用跨域请求来隐藏firbug控制台中的Ajax请求

普通jquery的Ajax请求在控制台中是可见的,如下: 而在利用jsonp(json with padding)进行Ajax跨域时,发现Ajax请求不会在控制台显示. 跨域代码如下: 前端代码: $.ajax({ type : "get", //jquey不支持post方式跨域 async:false, url : "http://www.cnblog.com", //跨域请求的URL dataType : "jsonp", //传递给后端,用

从控制台中读取密码 - C#

Tip :    从控制台中读取密码 语言: C# ______________________________________________________________ 在登陆Linux系统的时候,体验过在Linux的shell命令行窗口中输入用户密码吗? 下面体验下在Windows控制台中输入密码的方式 Showing  Effect SourceCode /// <summary> /// Read password from console /// </summary>

关于 JavaScript 中一个小细节问题 (在控制台中直接 {} 对象报错问题)

在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚好看到博客园有博友文章,顺便记录一下. 在 JavaScript 中, : 有三种作用,想必大家都知道,其一  三元表达式  true? A:B,其二 在 switch case 中 case 语句中会用到,其三 就是上图中,对象直接量表达式中. 其实 ,在 JS 中,: 还有一种用法,如下所示,内