常見的Angular裝飾器已骇,持續(xù)更新中…...

1. @Attribute

顧名思義闭翩,是用來尋找宿主元素屬性值的。

@Directive({
  selector: '[test]'
})
export class TestDirective {
  constructor(
    @Attribute('type') type
  ) {
    console.log(type); // text
  }
}
  
@Component({
  selector: 'my-app',
  template: `
    <input type="text" test>
  `,
})
export class App {}

2. @ViewChildren

  • 裝飾器可以從View DOM返回指定的元素或指令作為queryList浸船。queryList存儲的是項目列表對象妄迁,值得注意的是:當(dāng)應(yīng)用程序的狀態(tài)發(fā)生變化時,Angular會自動為queryList更新對象項糟袁。
  • queryList有很多API判族,其中:
    • getter屬性:
      • first — 獲取第一個item
      • last — 獲取最后一個item
      • length — 返回queryList的長度
    • Method方法:
      • map(),filter()项戴,find()形帮,reduce(),forEach()周叮,some()辩撑。
      • 其中toArray(),可以返回items形式的數(shù)組仿耽。
      • changes()可以進(jìn)行訂閱合冀,返回items的Observable。
  • queryist注意事項:
    • 只有在ngAfterViewInit生命周期方法之后才能得到项贺。
    • 返回的item不包含ng-content標(biāo)簽里的item君躺。
  • 默認(rèn)情況下,queryList返回的組件的實例开缎,如果想要返回原生的Dom棕叫,則需要聲明第二個參數(shù),例如:@ViewChildren(AlertComponent, { read: ElementRef }) alerts: QueryList<AlertComponent>
@Component({
  selector: 'alert',
  template: `
    {{type}}
  `,
})
export class AlertComponent {
  @Input() type: string = "success";
}

@Component({
  selector: 'my-app',
  template: `
    <alert></alert>
    <alert type="danger"></alert>
    <alert type="info"></alert>
  `,
})
export class App {
  @ViewChildren(AlertComponent) alerts: QueryList<AlertComponent>
  
  ngAfterViewInit() {
    this.alerts.forEach(alertInstance => console.log(alertInstance));
  }
}

3. @ViewChild

和ViewChildren類似奕删,但它只返回匹配到的第一個元素或與視圖DOM中的選擇器匹配的指令俺泣。

@Component({
  selector: 'alert',
  template: `
    {{type}}
  `,
})
export class AlertComponent {
  @Input() type: string = "success";
}

@Component({
  selector: 'my-app',
  template: `
    <alert></alert>
    <div #divElement>Tada!</div>
  `,
})
export class App {
  // 返回宿主元素
  @ViewChild("divElement") div: any;
  // 返回組件實例
  @ViewChild(AlertComponent) alert: AlertComponent;
  
  ngAfterViewInit() {
    console.log(this.div);
    console.log(this.alert);
  }
}

4. @ContentChildren

裝飾器從Content DOM返回指定的元素或指令作為queryList,值得注意的是:

  • 只有在ngAfterViewInit生命周期方法之后才能得到。
  • ContentChildren僅包含ng-content標(biāo)簽內(nèi)存在的元素伏钠。
  • 返回的queryList和@ViewChildren一樣横漏。
@Component({
  selector: 'tab',
  template: `
    <p>{{title}}</p>
  `,
})
export class TabComponent {
  @Input() title;
}

@Component({
  selector: 'tabs',
  template: `
    <ng-content></ng-content>
  `,
})
export class TabsComponent {
 @ContentChildren(TabComponent) tabs: QueryList<TabComponent>
 
 ngAfterContentInit() {
   this.tabs.forEach(tabInstance => console.log(tabInstance))
 }
}

@Component({
  selector: 'my-app',
  template: `
    <tabs>
     <tab title="One"></tab>
     <tab title="Two"></tab>
    </tabs>
  `,
})
export class App {}

5. @ContentChild

@ContentChildren類似,但僅返回與Content DOM中的選擇器匹配的第一個元素或指令熟掂。

@Component({
  selector: 'tabs',
  template: `
    <ng-content></ng-content>
  `,
})
export class TabsComponent {
 @ContentChild("divElement") div: any;
 
 ngAfterContentInit() {
   console.log(this.div);
 }
}

@Component({
  selector: 'my-app',
  template: `
    <tabs>
     <div #divElement>Tada!</div>
    </tabs>
  `,
})
export class App {}

6. @HostBinding

聲明一個屬性綁定到hosts上缎浇。

@Directive({
  selector: '[host-binding]'
})
export class HostBindingDirective {
  @HostBinding("class.tooltip") tooltip = true;
  
  @HostBinding("class.tooltip") 
  get tooltipAsGetter() {
    // 你的邏輯
    return true;
  };
   
  @HostBinding() type = "text";
}

@Component({
  selector: 'my-app',
  template: `
    <input type="text" host-binding> // 'tooltip' class 將被添加到host元素上
  `,
})
export class App {}

7. @HostListener

敬請期待,學(xué)習(xí)中...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赴肚,一起剝皮案震驚了整個濱河市华畏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尊蚁,老刑警劉巖亡笑,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異横朋,居然都是意外死亡仑乌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門琴锭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晰甚,“玉大人,你說我怎么就攤上這事决帖〔蘧牛” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵地回,是天一觀的道長扁远。 經(jīng)常有香客問我,道長刻像,這世上最難降的妖魔是什么畅买? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮细睡,結(jié)果婚禮上谷羞,老公的妹妹穿的比我還像新娘。我一直安慰自己溜徙,他們只是感情好湃缎,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蠢壹,像睡著了一般嗓违。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上知残,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天靠瞎,我揣著相機與錄音,去河邊找鬼求妹。 笑死乏盐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的制恍。 我是一名探鬼主播父能,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼梅鹦,長吁一口氣:“原來是場噩夢啊……” “哼紊浩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起继谚,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鹃唯,失蹤者是張志新(化名)和其女友劉穎爱榕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坡慌,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡黔酥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洪橘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跪者。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熄求,靈堂內(nèi)的尸體忽然破棺而出渣玲,到底是詐尸還是另有隱情,我是刑警寧澤弟晚,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布忘衍,位于F島的核電站,受9級特大地震影響卿城,放射性物質(zhì)發(fā)生泄漏淑履。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一藻雪、第九天 我趴在偏房一處隱蔽的房頂上張望秘噪。 院中可真熱鬧,春花似錦勉耀、人聲如沸指煎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽至壤。三九已至,卻和暖如春枢纠,著一層夾襖步出監(jiān)牢的瞬間像街,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镰绎,地道東北人脓斩。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像畴栖,于是被迫代替她去往敵國和親随静。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容