Angular2框架,提供了如下几个基本的功能:css
模块是一个业务功能的集合,咱们能够把几个组件、服务和其余一些业务模型的定义都加到一个模块里,他的功能更多的是帮助咱们更好的组织咱们的代码,方便代码重用。模板、数据绑定、依赖注入是定义一套这个框架的规则和语法,咱们用这套规则和语法编写的代码,就可以享受Angular2给咱们带来的便利。html
Angular2的模块能够将组件、服务、指令、方法等封装成一个模块,以下图所示(图片摘自官网):java
好比咱们开发一个系统,里面包含一个”个人消息”的功能,这个功能包含一些组件,如消息列表、详细详情、回复、新消息和好友列表等。除了这些组件,咱们又须要相应的服务来跟服务器交互来提供数据。bash
在Angular2中,提供了不少模块,例如上面的FormsModule
、CommonModule
, 还有Router等。他们都是一个个模块,也算是库,能够单独引入使用,也能够只引入须要的部分。服务器
Angular2的组件是一个可重用的单元,包含模版、样式,还有数据、事件等交互逻辑。
angular2
每一个组件(除了根组件)都会有一个父组件,每一个组件定义中的selector
的值,对应父组件中的一个html标签。app
元数据就是在定义模块、组件、服务的时候,Decorator方法里面的参数内容,例如一个AppComponent的元数据,就是@Component
里面的参数,以下:框架
{ selector: 'root-app',
templateUrl: 'app/app.component.html',
styleUrls: ['app/app.component.css']
}复制代码
在Angular2中,服务是一个很宽泛的定义,任何的类均可以被定义成服务,这个类中能够包含一些业务方法,能够包含环境配置变量。Angular2也没有对服务的定义作任何的规则限制。咱们只须要定义一个class,并把它export就能够。可是,通常咱们都是结合依赖注入来使用服务。函数
从Angular1的版本开始,依赖注入就是一个很核心的概念,在版本2中,主要是用于管理service实例的注入。在上面讲的service中,咱们建立了一个SomeService,在传统的用法中,咱们都是在须要用他的地方手动建立一个这个类的实例,而后调用他的相应方法或属性,post
可是,当咱们的系统中有不少service类,甚至这些service类相互之间又须要引用的时候,咱们就没有办法都经过手动建立的方式来获取service实例。更重要的是,这对于系统的解耦很是不便,不一样的服务之间直接建立和引用,会让系统变得很是难以维护。
Angular给咱们提供了一个很是好的解决方案,它借用了java等语言中某些容器库的概念,将全部service实例的建立都由容器来完成,当一个service须要引用另外一个service的时候,不是本身建立另外一个service的实例,而是从容器中获取那个service的实例。
有关依赖注入,须要注意的一点就是依赖注入的做用范围。Angular2的依赖注入是一个树形的结构,就好像组件树同样
在JQuery或者更早的时代,当咱们须要更新页面的内容的时候,咱们通常都须要本身得到页面的DOM,而后,设置他的值。当页面上的内容须要更新到js端的时候,又须要设置一些事件,如onclick, onblur等,而后在响应事件里面再从页面得到这个值。这不只须要些不少代码、浪费时间,还很是容易出错。终于,Angular把咱们从这些枯燥的工做中解放出来,提供了数据绑定的功能。
在Angular1.x的版本中,数据绑定是经过轮询实现的。在Angular1里,全部须要绑定的数据都会在$scope中,Angular1.x有一个轮训机制,每隔一段时间就检查全部绑定的变量,检查他们如今的值跟上次检查的值是否一致,若是不一致,就触发相应的方法更新页面的内容。这虽然给咱们开发带来了便利,可是若是有太多的变量须要监听,就会形成很大的性能问题。
在Angular2里面,绑定的数据的监听是经过zone.js实现。通俗来说,zone给全部有可能更新数据的方法加了一个补丁,就像AOP,或者说代理模式。每当这些更新数据的方法被调用的时候,就会触发另外一个方法,告诉Angular有数据修改,Angular再去判断变量是否修改,若是有修改,就更新DOM。
并且,Angular2的数据更新检测是在每一个组件上有一个检测器。这样,就算应用中有再多绑定的变量,当有一个数据修改的事件之后,也只是对应的那个组件的检测器被触发,来检查它以及它全部的子组件的数据修改。
这两方面结合,就使得Angular2应用的性能可以有很大的提高。
官方图:
这张图就比较清楚的说明了组件、服务、模板、Directive(指令)、数据绑定和依赖注入的相互关系。结合这张图和上面说的开发一个Angular2的应用的基本过程,这样就更容易理解了。
下面,咱们来看一下Angular应用的工做流程。
其它版本: