第一章笔记 (二)

一、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. waf2控件名

    1,查询表格(queryGrid),编辑表格(editGrid) wafGrid 2,快速F7 wafPromptQuick 3,表格F7 wafPromptGrid 4,自定义F7 wafPromp ...

  2. SQL查询排序某字段并选前N条数据

    看了网上各种乱七八糟的答案,无语. 明明这一句话就行了. select * from personinfo order by credit DESC limit 0,5

  3. HDU 5802 Windows 10

    传送门 Windows 10 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  4. 请求servlet操作成功后,在JSP页面弹出提示框

    应用环境: 点击前台页面,执行某些操作.后台action/servlet 执行后,返回处理结果(成功.失败.原因.状态等)信息.在前台jsp进行弹窗显示,alert(); 后台处理代码:(把要提示的数 ...

  5. 常见linux命令释义(第二天)

    查看磁盘与目录的容量. df 与du df  是英语Disk Free的意思.磁盘空余. df -h  -h中h指的是一human(人类)的角度,即用GB,MB的格式显示.这个比较常用,还有其他的选项 ...

  6. ::before/:before和::after/:after的使用

    ::before/:before和::after/:after的使用 之前总是可以看到::before :before ::after :after,但是没有使用过,今天查了些资料,终于知道了他们的关 ...

  7. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  8. Hibernate Hql 总结

    1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 auto-import(自 ...

  9. Java Web的两种开发模式

    参考文献:http://www.cnblogs.com/xdp-gacl/p/3908610.html 一.Jsp+JavaBean 此模式如下图所示:

  10. QT 初阶 第二章 创建对话框(查找对话框实例)

    最终效果图: 该对话框由三个文件组成:finddialog.h .finddialog.cpp. main.cpp 代码+注释 /*--finddialog.h--*/ #ifndef FINDDIA ...