註解/Annotation

 

你必定好奇@Component和@View究竟是怎麼回事。看起來像其餘語言(好比python) 的裝飾器,是這樣嗎?python

ES6規範裏沒有裝飾器。這其實利用了traceur的一個實驗特性:註解。給一個類 加註解,等同於設置這個類的annotations屬性:bootstrap

  1. //註解寫法
  2. @Component({selector:"ez-app"})
  3. class EzApp{...}

等同於:app

  1. class EzApp{...}
  2. EzApp.annotations = [new Component({selector:"ez-app"})];

 

很顯然,註解能夠看作編譯器(traceur)層面的語法糖,但和python的裝飾器不一樣, 註解在編譯時僅僅被放在annotation裏,編譯器並不進行解釋展開 - 這個解釋的工做是 Angular2完成的:函數

據稱,註解的功能就是Angular2團隊向traceur團隊提出的,這不是traceur的默認選項, 所以你看到,咱們配置systemjs在使用traceur模塊時打開註解:測試

    1. System.config({
    2. map:{traceur:"lib/traceur"},
    3. traceurOptions: {annotations: true}
    4. });

     

小結

若是你瞭解一點Angular1.x的bootstrap,可能隱約會感覺到Angular2中bootstrap的一些 變化 - 我指的並不是代碼形式上的變化。spa

以組件爲核心3d

在Angular1.x中,bootstrap是圍繞DOM元素展開的,不管你使用ng-app仍是手動執行bootstrap() 函數,自舉過程是創建在DOM之上的。code

而在Angular2中,bootstrap是圍繞組件開始的,你定義一個組件,而後啓動它。若是沒有一個組件, 你甚至都沒有辦法使用Angular2!blog

支持多種渲染引擎編譯器

以組件而非DOM爲核心,意味着Angular2在內核隔離了對DOM的依賴 - DOM僅僅做爲一種可選的渲染引擎存在:

 

DOM Render已經實現,Server Render正在測試,iOS Render和Android Render 是可預料的特性,雖然咱們看不到時間表。

這有點像React了。

相關文章
相關標籤/搜索