第一章笔记 (三)

一、Factories

factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能。例如:

myMod.factory('notificationsService',function(notificationsArchive){
var MAX_LEN = 10;
var notifications = [];
return {
push:function (notification) {
var notificationToArchive;
var newLen = notifications.unshift(notification);
//push 方法现在依赖闭包了
if (newLen > MAX_LEN) {
notificationToArchive = this.notifications.pop();
notificationsArchive.archive(notificationToArchive);
}
},
// other methods of the NotificationsService
};
AngularJS用提供的factory方法来注册对象返回。factory方法是常用的把对象带入依赖注入系统的方式。
我们可以提供一个域来模拟私有变量。当一个给定的服务,需要隐藏一些细节的时候很有用。

二、常量 Constants

常量可以在模型这个层级被定义并且被当作其他合作对象被注入。
myMod.factory('notificationsService',  function (notificationsArchive, MAX_LEN) { 
     …
     //creation logic doesn't change
});
我们可以在 notificationsService外面配置一些值。比如:myMod.constant('MAX_LEN', 10);
常量在创建跨不同应用的被重用的服务时很有用。唯一的缺点是,只要服务被表示为依赖常量,这个常量就必须被赋值。有时候,可以给常量设定默认的值,根据情况再去修改。
 
三、Providers
到目前位置,所描述的注册方法,都是最通用的特殊情况,所有这些的终极版本是 provider
myMod.provider('notificationsService', function () {
var config = {
maxLen : 10
};
var notifications = [];
return {
setMaxLen : function(maxLen) {
config.maxLen = maxLen || config.maxLen;
},
$get : function(notificationsArchive) {
return {
push:function (notification) {

if (newLen > config.maxLen) {

}
},
// other methods go here
}
};
});
首先,provider是个方法它必须返回一个对象包含$get属性。$get属性是一个工厂方法,当被调用的时候返回一个service实例。
其次,从provider方法中返回的对象有额外的方法和属性。
更重要的是,它可以有更多的配置逻辑,当我们的服务可以暴漏更多的配置方法而不仅仅是配置值。
 
四、模型生命周期 Modules lifecyle

AngularJS中module的生命周期有两个阶段:
A、配置阶段:该阶段所有的方法(recipes)被收集和配置。
B、运行阶段:该阶段我们可以运行任何后实例逻辑(post-instantiation logic)
 
五、配置阶段
Providers 只有在配置阶段可以配置。例如:
myMod.config(function(notificationsServiceProvider){
     notificationsServiceProvider.setMaxLen(5);
});
重要的是注意到一个依赖 notificationsServiceProvider 对象带Provider后缀,代表该方法(recipes)要被执行。
配置阶段允许我们做的是最后时刻的调整对象的创建公式。

六、运行阶段

运行阶段允许我们登记任何根据应用程序的引导应当被执行的工作。相当于其他编程语言中的主方法。
最大的区别是AngularJS模块可以有很多配置和运行块。在这个意义上说,没有单一的入口点。(正在运行的程序是一个真正的协作对象的集合)
比如,显示程序运行的初始时间:
angular.module('upTimeApp', []).run(function($rootScope) {
 $rootScope.appStarted = new Date();
});
Application started at: {{appStarted}}
注意: 保守地说$rootScope实例只能用来定义一些新的属性,并且只有那些在很多模版中可用的属性。
 
 
七、服务和他们跨模块的可见性 Services and their visibility across modules
在子模块中定义的服务可以注入到伏模块中的服务。比如:
angular.module('app', ['engines']) .factory('car', function ($log, dieselEngine) {
return {
  start: function() {
    $log.info('Starting ' + dieselEngine.type);
  };
  }
});
angular.module('engines', []) .factory('diesel1Engine', function () {
return {
  type: 'diesel'
};
});
服务定义在相邻模块也是彼此可见的。换句话说,模型的层级结构不影响服务对其他模型的可见。当AngularJS引导一个应用程序的时候,它把程序中所有模型的服务都联合在一起,在全局的命名空间下。
在AngularJS应用中,某命名有且只能对应一个服务。在模型高层级定义的服务会重写在子模型中的同名服务。

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

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

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

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

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  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. 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)

    1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...

  6. Spring揭秘 读书笔记 三 bean的scope与FactoryBean

    本书可作为王富强所著<<Spring揭秘>>一书的读书笔记  第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...

  7. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  8. ES6读书笔记(三)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,<ES6读书笔记(二)>,现在为第三篇,本篇内容包括: 一.Promise 二.Iterator和for of循 ...

  9. 《你必须知道的.NET》读书笔记三:体验OO之美

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.依赖也是哲学 (1)本质诠释:“不要调用我们,我们会调用你” (2)依赖和耦合: ①无依赖,无耦合 ...

随机推荐

  1. Bzoj1189 [HNOI2007]紧急疏散evacuate

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2293  Solved: 715 Descr ...

  2. HDU1150 Machine Schedule

    匈牙利算法 目前为止还是半懂不懂的状态 #include<iostream> #include<cstdio> #include<cstring> using na ...

  3. 雷赛dmc2410控制卡,驱动器 光栅 加电机

    一般驱动器为9pin接口:(1:VCC 2:限位近端 3:限位远端 4:GND):电源是供给限位器的 ,5:A+ 6:A- 7:B+ 8:B- 注意驱动器的电流大小和细分设置,电流一般1A左右 电流过 ...

  4. iOS&Node 搭建WebSocketServer实现聊天

    Server端使用的是Node.JS里的一个Socket.io的模块 iOS客户端使用的是SocketIO和SBJson框架 作者的源码有些问题,我做了一些自定义的修改. 代码地址:https://g ...

  5. Io 异常: The Network Adapter could not establish the connection 解决方法

    1.IP错误: 在设置URL时错误,例如:jdbc:oracle:thin:@192.168.1.80:1521:orcl 数据库服务器是否正确:ping 服务器IP是否通畅.ping不通则将URL更 ...

  6. 《JavaScript权威指南》学习笔记 第三天 找个对象

    现实生活中真的对象没有找到,在JavaScript 里左一个对象又一个对象,搞的我也是晕晕乎乎不知所云.人事复杂,人心难懂.我虽然是文科生,但是也不善于巧言.还是在js里面找找对象吧.那么我们今天就从 ...

  7. jQuery知识点总结(第五天)

    节点的操作和数据库操作一样,无非是增.删.改.查. 今天总结删除节点.复制节点.替换节点.与包裹节点 删除节点: 如果文档中一个元素多余,那么就需要删除掉.jQuery提供了三种删除节点的方法.分别是 ...

  8. BZOJ1047: [HAOI2007]理想的正方形

    传送门 蛤省省选果然水啊,我这种蒟蒻都能一遍A. 横向纵向维护两个单调队列,做两次求最大和最小的,总复杂度$O(NM)$ 码农题,考察代码实现能力 //BZOJ 1047 //by Cydiater ...

  9. nginx https性能优化

    影响HTTPS速度的主要原因:秘钥交换算法 常见的密钥交换算法有 RSA,ECDHE,DH,DHE 等算法.它们的特性如下: RSA:算法实现简单,诞生于 1977 年,历史悠久,经过了长时间的破解测 ...

  10. CSS3自适配手机屏幕

    @media only screen and (max-width:350px){ .img{ width: 80px; height:70px; background-image: url(./im ...