2016-07-03 33 views
14

我正在使用typescript for angular 2應用程序開發。typecipt中@符號的含義--Angular 2

但是,當我們編寫組件或路由配置代碼或其他地方 我們使用「@」符號。

我的問題是這個符號是什麼意思,爲什麼它是必需的?

回答

9

這意味着你正在申請一個裝飾器。

隨着TypeScript和ES6中類的引入,現在存在某些需要額外功能來支持註釋或修改類和類成員的場景。裝飾器提供了爲類聲明和成員添加批註和元編程語法的方法。修飾器是JavaScript的第1階段建議,可用作TypeScript的實驗性功能。

+0

我已經閱讀了@Gunter提供的參考鏈接,發現它只是一些代碼,它在運行時被注入到實際代碼中......但爲了注入它,我們使用了前面帶有@符號的函數名,以便Typescript理解它是裝飾者,它應該在轉譯或以後的時候保持謹慎。 如果我錯了,PLZ糾正我。 –

+0

聽起來正確。 –

+0

修飾器可以靜態解釋(不需要實際運行代碼)Angular使用它在構建時生成代碼(離線模板編譯器)和模板中的自動完成等工具支持(都在進行中)。 –

18

的這兩個概念之間的差異@符號你是r被稱爲decorator

裝飾器提供了爲類聲明和成員添加批註和元編程語法的方法。

基本上當你在做@component你告訴編譯器該類是一個angular2組件,元數據作爲參數傳遞。

例如。

@Component({ 
    moduleId: module.id, 
    selector: 'heroes-app', 
    templateUrl: 'heroes.component.html', 
    styleUrls: ['heroes.component.css'], 
}) 
class HeroesComponent{} 

該代碼將告訴編譯器該類HeroesComponent應該是一個angular2組件,其元數據作爲參數傳遞,它將創建一個組件類。

裝飾者不是魔術。這只是函數調用。

例如。

@Component({ 
selector: 'static-component', 
template: `<p>Static Component</p>` 
}) 
class StaticComponent {} 

等同於:

class DynamicComponent { 
} 

const dynamicComponent = Component({ 
    selector: 'dynamic-component', 
    template: `<p>Dynamic Component</p>` 
})(DynamicComponent); 

希望這有助於。