第一章笔记 (二)

一、scopes的层级和事件系统(the eventing system)

在层级中管理的scopes可以被用做事件总线。AngularJS 允许我们去传播已经命名的事件用一种有效负荷通过scopes的层级。一个事件可以从任何一个scope被传播,并且可以向上($emit) 或者向下($broadcast) 传送。
 
AngularJS核心服务和指令利用这个事件总线来处理应用状态的标志性重要的变化。比如,我们可以监听$locationChangeSuccess 事件(从 $rootScope实例广播), 只要浏览器中URL的地址改变,就可以被通知到。
例如:
$scope.$on('$locationChangeSuccess', function(event, newUrl, oldUrl){
//react on the location change here
//for example, update breadcrumbs based on the newUrl
});
$on方法对每一个scope实例都可行,通过注册一个作用域事件处理程序就可以被调用。
有点像 DOM 事件s,我们可以调用 preventDefault()和stopPropagation()方法事件对象的方法。 
注意: AngularJS 事件系统是仿照DOM的,传播系统是分别独立的没有任何共同的部分。
通常我们可以依靠 双向数据绑定到最终有一个清洁的解决方案。整个 AngularJS框架,只有三个事件被发射 ($includeContentRequested, $includeContentLoaded, $viewContentLoaded), 和7个事件被传播 ($locationChangeStart, $locationChangeSuccess, $routeUpdate, $routeChangeStart, $routeChangeSuccess, $routeChangeError, $destroy). 
 
二、View

 AngularJS 和HTML及DOM有更亲密的联系,因为它依赖于浏览器解析模板的文本。
在浏览器把标记转换为DOM树的之后,AngularJS 起作用并遍历解析DOM结构。每次它遇到一个指令,AngularJS 运行它自己的逻辑把指令转成屏幕上动态的部分。
 
三、声明模版视图-祈使控制器逻辑 Declarative template view – the imperative controller logic
针对UI建设,AngularJS促进了一种声明的方式。这就意味这,模版聚焦于描述一种想要的效果而不是实现它的方法。
就像说,“亲爱的AngularJS,这就在某个状态下我想要的UI的样子。现在就请运行并指出什么事件和怎样绘制UI吧。 ”

四、Modules

之前全局的控制器是这样写的:
var HelloCtrl = function ($scope) {
     $scope.name = 'World';
}
调用module之后,
angular.module('hello', []).controller('HelloCtrl', function($scope){
     $scope.name = 'World';
 });
AngularJS 本身定义angular这个全局的命名空间。该命名空间暴露了很多有用和方便的方法,module就是其中之一。
为了定义一个新的模块,我们需要提供它的名字作为module方法的第一个参数。第二个参数使得与其他模块的依赖得以实现。
它返回一个新建的模型实例,获取该实例,可以开始定义新的控制器。
 controller方法 通过传递两个参数:控制器名字和控制器的构造方法。
一个模块已经定义了,需要通知AngularJS关于田的存在。通过提供给ng-app属性的值来完成。
五、合作对象 Collaborating objects
Module 模式在管理代码方面很有用。此外通过模块模式,在某命名空间下注册对象,使得在对象之间声明依赖关系成为可能。
 
六、依赖注入 Dependency injection
AngularJS 有依赖注入(DI)引擎。它可以完成下面的活动:
A、通过对象表现,了解需要一个协作者collaborator 
B、查找需要的合作者
C、组合对象连成一个全功能的应用程序
 
七、注册服务Registering services

AngularJS只能连接它意识到的对象。所以,插入DI机制的第一步是用module注册一个对象。我们不直接注册一个对象的实例,而是通过object-creation 方法进入AngularJS的依赖注入系统中。AngularJS然后解释这些方法来实例化对象,然后相应的使对象关联。最终的结果是一些列实例化的、有关联的对象组成了一个正在运行的程序。
通过 $injector 服务被创建的对象都被作为服务来引用。AngularJS会按照既定的方法来解释,只要在程序的生命周期内,结果就是只创建一个对象的单例。
 
八、Values

最简单的方法管理一个对象就是注册一个预实例化的对象。
var myMod = angular.module('myMod', []);
myMod.value('notificationsArchive', new NotificationsArchive());
它没有任何依赖,实际当中,该注册方法值用来做最简单的对象。
 
九、Services
最简单注册注册对象依赖其他对象的方式是注册构造函数。比如:
myMod.service('notificationsService', NotificationsService);
var NotificationsService = function (notificationsArchive) {
  this.notificationsArchive = notificationsArchive;
};
最初的写法是:
var NotificationsService = function () {
 this.MAX_LEN = 10;
 this.notificationsArchive = new NotificationsArchive();
};
 

通过依赖注入,我们可以在NotificationsService 的构造方法中省略掉 new关键字。现在这个服务并不关心依赖实例,可以接收任何存档服务。【前面提到的存档服务例子】

大致是原来写法依赖new的实例,而现在只要传入一个对象内部就可以用。
在实践中,服务方法不常用,但可能会派上用场 注册预先存在的构造函数,进而使AngularJS管理这些构造函数创建的对象。

Mastering Web Application Development with AngularJS 读书笔记(二)的更多相关文章

  1. Mastering Web Application Development with AngularJS 读书笔记-前记

    学习AngularJS的笔记,这个是英文版的,有些地方翻译的很随意,做的笔记不是很详细,用来自勉.觉得写下来要比看能理解的更深入点.有理解不对的地方还请前辈们纠正! 一.关于<Mastering ...

  2. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

  3. Mastering Web Application Development with AngularJS 读书笔记(一)

    第一章笔记 (一) 一.PS:运行时配置IIS <html> <head> <script src="angular.js"></scri ...

  4. WEB Application Development Integrator : 应用设置

    1.1.       系统安装 应用 Oracle EBS WEB Application Development Integrator WEB ADI在Oracle EBS 11.5.10.* 版本 ...

  5. how tomcat works 读书笔记(二)----------一个简单的servlet容器

    app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...

  6. Servlet和JSP读书笔记(二)

    一. GenericServlet 1. 前面写的 Servlet和JSP学习笔记(一) 中的实例都是通过实现Servlet接口编写的,这样存在的问题就是:你必须实现Servlet中的所有方法,而不管 ...

  7. 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...

  8. spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...

  9. java读书笔记二

    这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...

随机推荐

  1. 【bzoj2245】 SDOI2011—工作安排

    http://www.lydsy.com/JudgeOnline/problem.php?id=2245 (题目链接) 题意 n个产品,每个需要造C[i]件:m个员工,每个员工可以制造一些产品:每个员 ...

  2. Deformity ASP/ASPX Webshell、Webshell Hidden Learning

    catalog . Active Server Page(ASP) . ASP.NET . ASP WEBSHELL变形方式 . ASPX WEBSHELL变形方式 . webshell中常见的编码转 ...

  3. 关于 SSV-ID: 4474 POC的分析和思考

    SSV-ID: 4474 SSV-AppDir: Discuz!漏洞 发布时间: 2008-11-21 (GMT+0800) URL:http://sebug.net/vuldb/ssvid-4474 ...

  4. 零散的JavaScript公用方法

    function stopBubble(e) { if (e && e.stopPropagation) {//如果传入了事件对象,那么就是非IE浏览器 e.stopPropagati ...

  5. iOS - NSError用法规范

    iphone跬步之--错误信息 NSError   一.获取系统的错误信息 比如移动文件时,获取文件操作错误: NSError *e = nil;[[NSFileManager defaultMana ...

  6. 网络存储(二)之ISCSI原理

    组成 一个简单ISCSI系统大致由以下部分构成 ISCSI Initiator 或者 ISCSI HBA ISCSI Target 以太网交换机 一台或者多台服务器 结构图如下: iscsi服务器用来 ...

  7. CentOS下vsftp安装、配置、卸载(转载)

    看过多个教程,只有这个能完整成功配置: http://www.centoscn.com/image-text/config/2015/0122/4543.html

  8. map转json

    if (javaObject instanceof Map) { Map<Object, Object> map = (Map<Object, Object>) javaObj ...

  9. Runner站立会议08

    会议时间:2016.4.27  21.10~21.25 地点:基教负一层 今天:看日历的代码,网上下的,没有注释 明天:继续看代码 困难:代码看不懂 会议照片: 燃尽图:

  10. JavaWeb学习笔记——开发动态WEB资源(四)打印当前使用的是get方法

    该工程的名称是testhttp,功能是在页面中表格打印浏览过程中的相关头信息. 新建一个工程,然后在这个工程里面新建一个servlet,这样便可以省去编写web.xml的过程 以下是TestHttpS ...