Angular6在自定義指令中使用@HostBingDing() 和@HostListener()

emmm,,,最近在爲項目的第二階段鋪路,偶然看到directive,想一想看由於項目已經高度集成了第三方組件,因此對於自定義指令方面的經驗本身實在知之甚少,後面通過閱讀相關資料,總結一篇關於在自定義指令中使用@HostBingDing() 和@HostListenner()。spring

在使用這兩個屬性以前,必須明白一件事,就是在angular中有三種directive:app

如圖所示,component與其餘兩個directive的一個很明顯的區別就是component有templatedom

宿主(host)

下面提到的一個宿主術語,在angular中宿主能夠是component也能夠是elementthis

@HostBinding() 裝飾器

設置宿主的屬性,好比樣式: height,width,color,margin, border等等spa

用法: @HostBingding()接受一個參數,這個參數用於指定宿主的屬性的名字命令行

@HostBinding('class.active')

@HostBinding('disabled')

@HostBinding('attr.role')

@HostListener() 裝飾器

處理宿主的事件,好比mouseover, mosuout, keydown等等code

用法:@HostListener() 接受一個參數,該參數用於指定宿主的事件的名字component

舉個例子

使用命令行生成rainbow自定指令blog

ng g directive rainbow

這裏定義個自定義指令 raibow,directive.tsseo

import {Directive, HostBinding, HostListener} from '@angular/core';

@Directive({
  selector: '[appRainbow]'
})
export class RainbowDirective {
    possibleColors = [
        'darksalmon', 'hotpink', 'lightskyblue', 'goldenrod', 'peachpuff',
        'mediumspringgreen', 'cornflowerblue', 'blanchedalmond', 'lightslategrey'
    ];

    @HostBinding('style.color') color: string;
    // @HostBinding('style.border-color') borderColor: string;
    @HostBinding('style.border-bottom-color') borderBottomColor: string;

    @HostListener('keydown') newColor() {
        const colorPick = Math.floor(Math.random() * this.possibleColors.length);

        this.color = this.borderBottomColor = this.possibleColors[colorPick];
    }
}

在任意宿主中使用該指令

<input type="text" appRainbow>

最終效果:

不知道爲蝦米動態圖片上傳不了,大概就是每次輸入鍵盤input的邊框和文字的顏色會隨機動態改變

相關文章
相關標籤/搜索