Angular2-自定義指令@Directive

印度泰姬陵與人力車

概述

所謂指令就是用于改變一個(gè)DOM元素的外觀或行為糕篇,Angular2為我們封裝了很多的內(nèi)置指令,項(xiàng)目中也無時(shí)無刻不在使用指令,Angular2中有三類指令

結(jié)構(gòu)型指: 通過添加和移除 DOM 元素改變 DOM 布局的指令锦针,例如:NgForNgIf
屬性型指令:改變?cè)亍⒔M件或其它指令的外觀和行為的指令置蜀,例如:NgClass
組件:組件是一個(gè)模板指令奈搜,相信大家都很熟悉

今天我們來講講自定義指令,通過一個(gè)案例來學(xué)習(xí)自定義屬性指令盯荤,需求是:在輸入框輸入值時(shí)馋吗,如果值中包含空格,我們把空客去掉

第一步秋秤、創(chuàng)建自定義指令

我們通過import從core庫中導(dǎo)入Directive,HostListener,ElementRef的引入

Directive
用于@Directive裝飾器功能宏粤,用于定義這個(gè)class是一個(gè)指令脚翘,通過@Directive修飾這樣就擁有了指令的功能,我們?cè)谠M中聲明selector屬性值為[input-trim]绍哎,方括號(hào)的寫法表示是一個(gè)屬性指令
還有以下幾種寫法:

element-name:使用元素名稱選擇

.class:使用類名選擇

[attribute]:使用屬性選擇

[attribute=value]:使用屬性和值選擇

:not(sub_selector):只有當(dāng)元素與sub_selector不匹配時(shí)才選擇

selector1,selector2:選擇擇selector1或selector2

這里我們采用屬性的方式指定選擇器来农,在頁面的使用是這樣的(加粗部分)

<input type="text" id="name" input-trim />
如果你使用類名選擇是這樣的
<input type="text" id ="name" class="input-trim" />
以此類推

HostListener
HostListener 是屬性裝飾器,用來為宿主元素添加事件監(jiān),類似于我們?cè)鶭avaScript的addEventListener
@HostListener這里我們監(jiān)聽了keyup事件(可以定義原生JavaScript中的其他事件)崇堰,當(dāng)表單中有輸入的時(shí)候我們就會(huì)調(diào)用方法沃于,傳遞了一個(gè)$event對(duì)象進(jìn)去,后面緊跟我們觸法keyup事件的方法體

ElementRef(注意:需要在構(gòu)造函數(shù)中注入進(jìn)去)
用于獲取獲取DOM節(jié)點(diǎn)相關(guān)的屬性
這里我們當(dāng)我們?cè)陧撁姹韱屋斎氲臅r(shí)候赶袄,會(huì)調(diào)用keyupFun方法揽涮,首先判斷是否有值輸入,有的情況下饿肺,我們通過傳遞進(jìn)來的evt獲取value值蒋困,在調(diào)用trim()方法去除空格,賦值給elementRef.nativeElement.value渲染到頁面


第二步敬辣、在app.module聲明

我們的指令寫好之后還要在app.module聲明才能生效

第三步雪标、在模板文件中引用指令

最后一步

打開瀏覽器在表單中輸入,當(dāng)我們敲空格溉跃,會(huì)被刪除村刨,看效果圖。這樣我們就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的去空格的指令撰茎,這里使用這個(gè)案例只是為了演示使用自定義指令


擴(kuò)展:Host

這里如果我們不采用HostListener屬性裝飾器來監(jiān)聽事件嵌牺,我們可以在指令的 metadata 信息中,設(shè)定宿主元素的事件監(jiān)聽信息龄糊,具體示例如下:

我們這里通過這種方式監(jiān)聽實(shí)踐相當(dāng)于在頁面在定義了一個(gè)click事件逆粹,函數(shù)就是onClick(),當(dāng)然這個(gè)onClick()需要我們?cè)谥噶钪羞M(jìn)行定義炫惩。最好展示的效果跟上面方式是一樣的僻弹。
這里不僅可以是監(jiān)聽事件,還可以自定義屬性他嚷,看看下面代碼

這里我們自定義了一個(gè)屬性 role-data蹋绽,對(duì)應(yīng)值為data-trim(這里為了演示,此屬性沒有任何意義)筋蓖,再看看頁面input表單中就會(huì)有一個(gè)role-data屬性卸耘,看下面圖片

<完>

福利:如果你是喜歡看書的朋友,不妨點(diǎn)擊【有驚喜】這是我在亞馬遜買的電子書扭勉。都非常珍貴鹊奖,希望你能喜歡

作者:小處成就大事

簡(jiǎn)介:一個(gè)喜歡分享和學(xué)習(xí)的前端開發(fā)程序猿,平時(shí)喜歡看看書涂炎,游泳忠聚,爬山设哗,戶外騎行等,期待與志同道合的你成為朋友两蟀,一起交流网梢、一起進(jìn)步。

初衷:對(duì)我來說赂毯,寫文章是學(xué)習(xí)和記錄一些沒有精通和完全掌握的知識(shí)點(diǎn)战虏,其次才是分享知識(shí)。通過自己查找資料和經(jīng)驗(yàn)心得整理出來党涕,做到通俗易懂分享給需要的人烦感,分享知識(shí)不是為了炫耀,也不是為了謀利膛堤,而是為了更多需要汲取知識(shí)的人手趣,可以收獲知識(shí),同時(shí)自己也可以從中收獲知識(shí)肥荔,堅(jiān)持做知識(shí)分享真的很難绿渣,但是我會(huì)堅(jiān)持下去····

博客小處成就大事_新浪博客

如果有志同道合的朋友不妨加微信一起交流和學(xué)習(xí),期待你的到來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末燕耿,一起剝皮案震驚了整個(gè)濱河市中符,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌誉帅,老刑警劉巖淀散,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚜锨,居然都是意外死亡吧凉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門踏志,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胀瞪,你說我怎么就攤上這事针余。” “怎么了凄诞?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵圆雁,是天一觀的道長。 經(jīng)常有香客問我伪朽,道長,這世上最難降的妖魔是什么汛蝙? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任烈涮,我火速辦了婚禮,結(jié)果婚禮上鞍盗,老公的妹妹穿的比我還像新娘鹅颊。我一直安慰自己杠娱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布野来。 她就那樣靜靜地躺著舀患,像睡著了一般聊浅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天低匙,我揣著相機(jī)與錄音旷痕,去河邊找鬼。 笑死努咐,一個(gè)胖子當(dāng)著我的面吹牛苦蒿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渗稍,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼佩迟,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了竿屹?” 一聲冷哼從身側(cè)響起报强,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拱燃,沒想到半個(gè)月后秉溉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碗誉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年召嘶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哮缺。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弄跌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尝苇,到底是詐尸還是另有隱情铛只,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布糠溜,位于F島的核電站淳玩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏非竿。R本人自食惡果不足惜蜕着,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望红柱。 院中可真熱鬧侮东,春花似錦、人聲如沸豹芯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铁蹈。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握牧,已是汗流浹背容诬。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沿腰,地道東北人览徒。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像颂龙,于是被迫代替她去往敵國和親习蓬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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