精通AngularJS 读书笔记(2)
AngularJS 速成
视图
因为AngularJS 依靠浏览器去解析模板,所以要保证模板是有效的HTML。尤其要小心闭合号HTML标签(未闭合好的标签不会产生任何错误信息,但会让视图不能正确渲染)。AngularJS 在有效的DOM树下才能好好工作。
AngularJS 扩展了HTML的词汇库(增加新的属性或HTML元素,并告知浏览器如何解释它们),这类似于创造了一门基于HTML的领域特定语言(domain-specific language, DSL),并指导浏览器如何理解它。因此,常听到AngularJS “教浏览器新把戏”的说法。
AngularJS 提倡声明式UI结构。在实践中,这意味着模板专注于描述所需要的效果,而非其实现。
模块与依赖注入
AngularJS 为自己定义了全局命名空间angular,它提供多种功能及不少便利函数,module就是其中之一。module为AngularJS 管理的对象(控制器、服务等)扮演容器的角色。
定义新的模块,需要传入名字,作为调用module的第一个参数,而第二个参数则表达此模块依赖其他哪些模块。
模块定义好了,要告知AngularJS 它的存在,这只要为ng-app属性赋值即可。
<!--接下来的内容,其实我没读懂,先简略记录一下吧 -->
协作对象
AngularJS 用模块组织对象。在模块上可以注册的对象,不仅限于AngularJS 对象(控制器、过滤器等),还包括开发者自定义的任何对象。
模块模式在组织代码方面非常有用,但是,AngularJS 走得更远一些。除了在模块中注册对象外,它还可以声明这些对象的相互依赖关系。
如前所述,$scope对象神秘地注入了控制器中。实际上,这是因为控制器声明了它需要$scope,所以AngularJS 才会创建并注入它。这套依赖管理系统可以这样总结:“为了正常工作,我需要一个依赖(协作对象):我不知道它从哪儿来,也不知道它如何创建。我只知道我需要它,所以请为我提供它。”
注册服务
AngularJS 只连接其认识的对象。因此,接入依赖注入机制的第一步,是将对象注册在模块上。我们不直接注册对象的实例,而是将对象创建的方案抛给依赖注入系统,然后AngularJS 解释这些方案以初始化对象,并在之后连接它们,最后成为可运行的应用。
AngularJS 的$provide服务可以注册不同的对象创建方案。之后$injector服务会解释这些方案,生成完备而可用的对象实例(已经解决好所有的依赖关系)。
可以用service方法注册构造函数,也可以用factory方法,它比service更加灵活。
以上描述过的所有注册方法,都是最通用方法provider的特殊类型。
模块的生命周期
AngularJS支持多种对象创建方案,provider是其中的通用方法,它在创建对象实例前可以对其进行配置。为了支持provider,AngularJS 将模块的生命周期分为两个阶段:
- 配置阶段:收集对象创建方案,并进行配置。
- 运行阶段:执行所有初始化后的逻辑
AngularJS应用中的服务是不能重名的,父模块中的服务会覆盖子模块中的同名服务。
<!--
作者:纤锐
出处:http://www.cnblogs.com/beginner2014/p/5169150.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。谢谢合作。
-->
精通AngularJS 读书笔记(2)的更多相关文章
- 精通AngularJS 读书笔记(1)
邂逅AngularJS AngularJS是采用JavaScript语言编写的客户端MVC框架,帮助开发者编写现代化的单页面应用.尤其适合编写有大量CURD操作的,具有AJAX风格的富客户端应用. 使 ...
- Mastering Web Application Development with AngularJS 读书笔记-前记
学习AngularJS的笔记,这个是英文版的,有些地方翻译的很随意,做的笔记不是很详细,用来自勉.觉得写下来要比看能理解的更深入点.有理解不对的地方还请前辈们纠正! 一.关于<Mastering ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- Mastering Web Application Development with AngularJS 读书笔记(二)
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...
- Mastering Web Application Development with AngularJS 读书笔记(一)
第一章笔记 (一) 一.PS:运行时配置IIS <html> <head> <script src="angular.js"></scri ...
- 《html5 从入门到精通》读书笔记(二)
接着上面继续记录笔记,这次要记的知识点比较多...记录下我认为比较重要的东西. 一.表单属性 1.autocomplete属性 该属性规定form或input域应该拥有自动完成功能. <form ...
- 《html5 从入门到精通》读书笔记(一)
今天看了<html5 从入门到精通>这本书,感觉阅读下来很舒心,不像阅读其他书籍很揪心.html增加的知识点,我觉得非常有价值,看完几章记录了一些内容,不但能巩固,也为下次遗忘知识点做好准 ...
- 【精通css读书笔记】 第八章 布局
学习了css布局的基础后又来翻阅<精通css>这本经典书籍,对布局有了进一步的认识. 基于浮动的布局 两列的布局仍然是使用一个元素向左浮动,一个元素向右浮动,值得注意的是要加入displa ...
- 《Linux.Shell编程从入门到精通》读书笔记
第一章 第一个Shell程序 以 #!解析器名称 开头,表示选择哪个解释器解释shell脚本 source命令 export命令 env命令 unset命令 第二章 shell编程基础 函数传递 标准 ...
随机推荐
- oracle数据库之数组的操作样例
1.创建bean对象 --创建bean对象 CREATE OR REPLACE TYPE "FM_FLOWCPHDTSWJJIMPBEAN" as object ( wf_no ) ...
- Sql Server中暂停命令
Sql Server中暂停几秒再执行后面的命令! -- 语法WAITFOR { DELAY 'time_to_pass' | TIME 'time_to_execute' | [ ( r ...
- sed 技巧
八.流编辑器sed sed ':a;N;$!ba;s/0.01/0.0001/g' file:a 创建一个labelaN 将下一行读入到模式空间$! 如果不是最后一行,ba跳转到label a处s/0 ...
- JqGrid自定义的列
$("#gridTable").jqGrid({ //...其它属性 colModel: [ //...其它列 { name: 'dsource_alarm', index: 'd ...
- composer [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
在执行composer update时报错 [ReflectionException]Class Fxp\Composer\AssetPlugin\Repository\NpmRepository d ...
- js 实现类似php函数number_format的功能
今天同事在做一个功能的时候需要使用js来实现类似php函数number_format的功能,最后就有了下面的方法,可以实现了: /** * number_format * @param number ...
- MWeb 1.5 发布!增加打字机滚动模式、发布到 Evernote、印象笔记、Wordpress.com、Blogger、编辑器内代码块语法高亮
打字机滚动模式(Typewriter Scrolling) 快捷键:CMD + Option + T,菜单:View - Typewriter Scrolling ,效果如下图: 发布到 Everno ...
- CentOS7下Apache及Tomcat开启SSL
安装: 复制代码 yum install -y openssl #使用openssl可手动创建证书 yum install -y httpd yum install -y mod_ssl 防火墙打开8 ...
- [转] vim自定义配置 和 在ubnetu中安装vim
Ubuntu 12.04安装vim和配置 问题: ubuntu默认没有安装vim,出现: jyg@ubuntu:~$ vim test.cThe program 'vim' can be foun ...
- Fiddler的一些坑: !SecureClientPipeDirect failed: System.IO.IOException
手机的请求Fiddler可以捕捉,但是手机一直无法上网,在logs中看到的日志如下: !SecureClientPipeDirect failed: System.IO.IOException 由于远 ...