Angular 2.0版本內容

Angular2框架,提供瞭如下幾個基本的功能:css

  • 模塊
  • 組件
  • 服務
  • 模板
  • 數據綁定
  • 依賴注入

模塊是一個業務功能的集合,咱們能夠把幾個組件、服務和其餘一些業務模型的定義都加到一個模塊裏,他的功能更多的是幫助咱們更好的組織咱們的代碼,方便代碼重用。模板、數據綁定、依賴注入是定義一套這個框架的規則和語法,咱們用這套規則和語法編寫的代碼,就可以享受Angular2給咱們帶來的便利。html

模塊

Angular2的模塊能夠將組件、服務、指令、方法等封裝成一個模塊,以下圖所示(圖片摘自官網):
library-module.pngjava

好比咱們開發一個系統,裏面包含一個」個人消息」的功能,這個功能包含一些組件,如消息列表、詳細詳情、回覆、新消息和好友列表等。除了這些組件,咱們又須要相應的服務來跟服務器交互來提供數據。bash

在Angular2中,提供了不少模塊,例如上面的FormsModuleCommonModule, 還有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應用的性能可以有很大的提高。

官方圖:

databinding.png

它們之間的關係

爲了描述這幾個功能之間的關係,官方圖:
overview2-basic.png

這張圖就比較清楚的說明了組件、服務、模板、Directive(指令)、數據綁定和依賴注入的相互關係。結合這張圖和上面說的開發一個Angular2的應用的基本過程,這樣就更容易理解了。
下面,咱們來看一下Angular應用的工做流程。

  1. 咱們定義一個根模塊和一個根組件,而後在main.ts裏面用這個根模塊啓動應用。
  2. 根組件裏面的一個html標籤若是匹配了某一個組件的’selector’,這個組件就會被加載在這個標籤裏面。這樣,整個應用就是一個組件樹,
  3. 咱們定義的Component信息,也就是類和Metadata(元數據),Angular會根據這個組件定義將組件中定義的模板顯示到selector對應的標籤上,將樣式應用到模板頁面上。組件和模板之間又經過數據綁定聯繫起來,組件中的變量經過數據綁定展現到模板上,模板又經過事件綁定,對應到組件裏的方法上。Directive的工做原理也跟上面相似。
  4. 最後,咱們定義的service被Angular的Injector保存在一個樹形結構的容器裏,在某個組件中當咱們須要使用這個service時,就能夠在構造函數中直接得到這個service的實例,而不用手動建立。這樣,多個組件,或者模塊均可以共用一個service的實例。因此,service除了提供業務方法,也能提供共享數據、數據傳輸等功能。

其它版本:

angular 2.0版本內容

相關文章
相關標籤/搜索