2016-06-28 122 views
7

我剛開始使用Angular 2,並想知道爲什麼selectortemplate等一些屬性放在組件裝飾器中,而不是放在組件類中。爲什麼Angular 2使用裝飾器?

在Angular 2中使用所有這些裝飾器有什麼意義?

回答

2
  • 爲了方便爲工具,以提供各種支持,像模板:

    • 錯誤檢查
    • 自動完成
    • 圖形GUI設計師
  • 從裝飾器生成代碼允許:

    • 更聲明定義一些東西或
    • 根據一些配置產生不同的代碼(如 即將 脫機模板編譯器)

代碼將需要執行使用結果表達式可能發出。裝飾器可以很容易靜態評估,而不需要執行TypeScript代碼(除了可能是一個簡單的和有限的子集)。

0

通常,裝飾器允許您執行功能。例如,@Component執行從Angular2導入的Component函數。在引擎蓋下,這樣的裝飾器在類上定義了一些元數據。這使您可以配置該類以將其「標記」爲組件。然後Angular2能夠將模板中的選擇器鏈接到這樣的類。

本文可以給大家介紹一下引擎蓋下會發生什麼更多的提示:

你可以注意到,裝飾可以爲不同級別(類,類屬性,方法打字稿申請參數)。

+1

「通常,裝飾器允許您執行功能」。這不是很有幫助。編程語言讓你「執行功能」... – spinkus

4

除了已經存在的特定於平臺的答案外,我還希望從更通用的角度切入。這個問題,從我的觀點,以某種方式涉及到了繼承權(如@Component VS extends Component

選擇裝飾圖案的一些裝飾用的好處的決定是:

1.關注點分離:

裝飾器中的信息是聲明式的,它們定義了類的行爲,很可能不會隨着時間而改變,並被框架使用。類屬性和字段是特定於類的數據,將始終處理並經常更新,並且只在類本身內有意義。這兩種數據不應該混合在一起。

2。支持多種修改

由於Diamond problem,許多語言防止多繼承。另一方面,一個班級可以有多個用於不同目的的裝飾器(例如@Component和已棄用的@RouteConfig

+1

我真的不買第二個參數。在Angular2中使用裝飾器緩解多重繼承問題?是的,裝飾器很適合用元數據標記類。但他們已經像使用類/類型聲明一樣使用了em。組件類/類型始終用\ @Component打扮。模塊總是使用\ @NMModule,並且將\ @Component放在除了什麼是邏輯組件類之外的東西上是沒有意義的。恕我直言,這是一個可疑的設計決定。並不是說沒有優勢 - 與任何東西一樣。 – spinkus

相關問題