angular2.0裝飾器祥解

什么是裝飾器?

裝飾器是一個(gè)函數(shù),它將元數(shù)據(jù)添加到類、類成員(屬性、方法)和函數(shù)參數(shù)。
裝飾器是一個(gè) JavaScript 的語(yǔ)言特性,裝飾器在 TypeScript 里已經(jīng)實(shí)現(xiàn),并被推薦到了ES2016(也就是ES7)。
要想應(yīng)用裝飾器,把它放到被裝飾對(duì)象的上面或左邊。
Angular 使用自己的一套裝飾器來(lái)實(shí)現(xiàn)應(yīng)用程序各部件之間的相互操作
@NgModule裝飾器
NModule是一個(gè)裝飾器函數(shù),它接收一個(gè)用來(lái)描述模塊屬性的元數(shù)據(jù)對(duì)象。其中最重要的屬性是:

declarations
聲明本模塊中擁有的視圖類。 Angular 有三種視圖類:組件指令管道。
exports
declarations 的子集,可用于其它模塊的組件模板。
imports
本模塊聲明的組件模板需要的類所在的其它模塊。
providers
服務(wù)的創(chuàng)建者,并加入到全局服務(wù)列表中,可用于應(yīng)用任何部分。
bootstrap
指定應(yīng)用的主視圖(稱為根組件),它是所有其它視圖的宿主。只有根模塊才能設(shè)置bootstrap
屬性。

@Component組件裝飾器

它把緊隨其后的類標(biāo)記成了組件類@Component裝飾器能接受一個(gè)配置對(duì)象, Angular 會(huì)基于這些信息創(chuàng)建和展示組件及其視圖。@Component的配置項(xiàng)包括:
moduleId: 為與模塊相關(guān)的 URL(例如templateUrl)提供基地址。
selector: CSS 選擇器,它告訴 Angular 在父級(jí) HTML 中查找<hero-list>
標(biāo)簽,創(chuàng)建并插入該組件。 例如,如果應(yīng)用的 HTML 包含<hero-list></hero-list>, Angular 就會(huì)把HeroListComponent
的一個(gè)實(shí)例插入到這個(gè)標(biāo)簽中。
templateUrl:組件 HTML 模板的模塊相對(duì)地址,如前所示。
providers 組件所需服務(wù)的依賴注入提供商數(shù)組。 這是在告訴 Angular:該組件的構(gòu)造函數(shù)需要一個(gè)HeroService
服務(wù),這樣組件就可以從服務(wù)中獲得英雄數(shù)據(jù)

@Component里面的元數(shù)據(jù)會(huì)告訴 Angular 從哪里獲取你為組件指定的主要的構(gòu)建塊。模板、元數(shù)據(jù)和組件共同描繪出這個(gè)視圖
@Component擴(kuò)展了@Directive, 以便@Directive中的配置項(xiàng)也能用在組件上moduleId: module.id如果設(shè)置了,templateUrl和styleUrl會(huì)被解析成相對(duì)于組件的。

viewProviders: [MyService, { provide: ... }]

依賴注入provider的數(shù)組,局限于當(dāng)前組件的視圖中。

template: 'Hello {{name}}'templateUrl: 'my-component.html'

當(dāng)前組件視圖的內(nèi)聯(lián)模板或外部模板地址

styles: ['.primary {color: red}']styleUrls: ['my-component.css']

內(nèi)聯(lián)CSS樣式或外部樣式表URL的列表,用于給組件的視圖添加樣式。

****@Injectable裝飾器

聲明當(dāng)前類有一些依賴,當(dāng)依賴注入器創(chuàng)建該類的實(shí)例時(shí),這些依賴應(yīng)該被注入到構(gòu)造函數(shù)中。

** @Pipe({...})裝飾器** 聲明當(dāng)前類是一個(gè)管道,并且提供關(guān)于該管道的元數(shù)據(jù)

** @Directive裝飾器**
聲明當(dāng)前類是一個(gè)指令,并提供關(guān)于該指令的元數(shù)據(jù)

** @Input() @Output() @HostBinding @HostListener @ContentChild裝飾器**

@Input() myProperty;

聲明一個(gè)輸入屬性,以便我們可以通過(guò)屬性綁定更新它。(比如: <my-cmp [my-property]="someExpression">
).

@Output() myEvent = new EventEmitter();

聲明一個(gè)輸出屬性,以便我們可以通過(guò)事件綁定進(jìn)行訂閱。(比如:<my-cmp (my-event)="doSomething()">
).

@HostBinding('[class.valid]') isValid;

把宿主元素的屬性(比如CSS類:valid
)綁定到指令/組件的屬性(比如:isValid
)。

@HostListener('click', ['$event']) onClick(e) {...}

通過(guò)指令/組件的方法(例如onClick
)訂閱宿主元素的事件(例如click
),可選傳入一個(gè)參數(shù)($event
)。

@ContentChild(myPredicate) myChildComponent;

把組件內(nèi)容查詢(myPredicate
)的第一個(gè)結(jié)果綁定到類的myChildComponent
屬性。

@ContentChildren(myPredicate) myChildComponents;

把組件內(nèi)容查詢(myPredicate
)的全部結(jié)果,綁定到類的myChildComponents
屬性。

@ViewChild(myPredicate) myChildComponent;

把組件視圖查詢(myPredicate
)的第一個(gè)結(jié)果綁定到類的myChildComponent
屬性。對(duì)指令無(wú)效。

@ViewChildren(myPredicate) myChildComponents;

把組件視圖查詢(myPredicate
)的全部結(jié)果綁定到類的myChildComponents
屬性。對(duì)指令無(wú)效

@SkipSelf裝飾器
在注入器injector層級(jí)中的祖先injector中查找 CoreModule
,如果沒(méi)有祖先injector則會(huì)提供一個(gè)CoreModule實(shí)例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 組件基礎(chǔ) 組件用來(lái)包裝特定的功能,應(yīng)用程序的有序運(yùn)行依賴于組件之間的協(xié)同工作。組件是angular應(yīng)用的最小邏輯單...
    oWSQo閱讀 1,446評(píng)論 0 0
  • 1.組件 組件負(fù)責(zé)控制屏幕上的一小塊區(qū)域,我們稱之為視圖。例如,下列視圖都是由組件控制的: 帶有導(dǎo)航鏈接的應(yīng)用根組...
    不去解釋閱讀 620評(píng)論 0 1
  • Angular 2架構(gòu)總覽 - 簡(jiǎn)書(shū)http://www.itdecent.cn/p/aeb11061b82c A...
    葡萄喃喃囈語(yǔ)閱讀 1,548評(píng)論 2 13
  • 一、起項(xiàng)目 根據(jù)官方教程,執(zhí)行以下: 然后要把下面文件略微改一下(官方?jīng)]有寫(xiě)),否則編譯出的js和ts混在一起,很...
    Angeladaddy閱讀 1,329評(píng)論 0 4
  • 人到了某個(gè)年齡才會(huì)慢慢知道“愛(ài)”這個(gè)字的分量,時(shí)間越久越不敢輕易說(shuō)愛(ài)。不是不愛(ài),也不是喜歡但是不愛(ài),是我正在愛(ài)著你...
    ProfessorBennie閱讀 220評(píng)論 0 0

友情鏈接更多精彩內(nèi)容