Vue常用的修飾符有哪些?有什么應(yīng)用場(chǎng)景?

image.png

一疟呐、修飾符是什么

在程序世界里,修飾符是用于限定類型以及類型成員的聲明的一種符號(hào)

在Vue中园细,修飾符處理了許多DOM事件的細(xì)節(jié)唆垃,讓我們不再需要花大量的時(shí)間去處理這些煩惱的事情,而能有更多的精力專注于程序的邏輯處理

vue中修飾符分為以下五種:

  1. 表單修飾符
  2. 事件修飾符
  3. 鼠標(biāo)按鍵修飾符
  4. 鍵值修飾符
  5. v-bind修飾符

二趁猴、修飾符的作用

表單修飾符

在我們填寫表單的時(shí)候用得最多的是input標(biāo)簽刊咳,指令用得最多的是v-model

關(guān)于表單的修飾符有如下:

  • lazy
  • trim
  • number

lazy

在我們填完信息,光標(biāo)離開(kāi)標(biāo)簽的時(shí)候儡司,才會(huì)將值賦予給value娱挨,也就是在change事件之后再進(jìn)行信息同步

<input type="text" v-model.lazy="value">
<p>{{value}}</p>

trim

自動(dòng)過(guò)濾用戶輸入的首空格字符,而中間的空格不會(huì)過(guò)濾

<input type="text" v-model.trim="value">

number

自動(dòng)將用戶的輸入值轉(zhuǎn)為數(shù)值類型捕犬,但如果這個(gè)值無(wú)法被parseFloat解析跷坝,則會(huì)返回原來(lái)的值

<input v-model.number="age" type="number">

事件修飾符

事件修飾符是對(duì)事件捕獲以及目標(biāo)進(jìn)行了處理酵镜,有如下修飾符:

  • stop
  • prevent
  • self
  • once
  • capture
  • passive
  • native

stop

阻止了事件冒泡,相當(dāng)于調(diào)用了event.stopPropagation方法

<div @click="shout(2)">
  <button @click.stop="shout(1)">ok</button>
</div>
//只輸出1

prevent

阻止了事件的默認(rèn)行為柴钻,相當(dāng)于調(diào)用了event.preventDefault方法

<form v-on:submit.prevent="onSubmit"></form>

self

只當(dāng)在 event.target 是當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù)

<div v-on:click.self="doThat">...</div>

使用修飾符時(shí)淮韭,順序很重要;相應(yīng)的代碼會(huì)以同樣的順序產(chǎn)生贴届。因此靠粪,用 v-on:click.prevent.self 會(huì)阻止所有的點(diǎn)擊,而 v-on:click.self.prevent 只會(huì)阻止對(duì)元素自身的點(diǎn)擊

once

綁定了事件以后只能觸發(fā)一次毫蚓,第二次就不會(huì)觸發(fā)

<button @click.once="shout(1)">ok</button>

capture

使事件觸發(fā)從包含這個(gè)元素的頂層開(kāi)始往下觸發(fā)

<div @click.capture="shout(1)"> obj1
  <div @click.capture="shout(2)"> obj2
    <div @click="shout(3)"> obj3
      <div @click="shout(4)"> obj4</div>
    </div>
  </div>
</div>

// 輸出結(jié)構(gòu): 1 2 4 3 

passive

在移動(dòng)端占键,當(dāng)我們?cè)诒O(jiān)聽(tīng)元素滾動(dòng)事件的時(shí)候,會(huì)一直觸發(fā)onscroll事件會(huì)讓我們的網(wǎng)頁(yè)變卡绍些,因此我們使用這個(gè)修飾符的時(shí)候捞慌,相當(dāng)于給onscroll事件整了一個(gè).lazy修飾符

<!-- 滾動(dòng)事件的默認(rèn)行為 (即滾動(dòng)行為) 將會(huì)立即觸發(fā) -->
<!-- 而不會(huì)等待 `onScroll` 完成  -->
<!-- 這其中包含 `event.preventDefault()` 的情況 -->
<div v-on:scroll.passive="onScroll">...</div>

不要把 .passive 和 .prevent 一起使用,因?yàn)?.prevent 將會(huì)被忽略,同時(shí)瀏覽器可能會(huì)向你展示一個(gè)警告柬批。
passive 會(huì)告訴瀏覽器你不想阻止事件的默認(rèn)行為

native

讓組件變成像html內(nèi)置標(biāo)簽?zāi)菢颖O(jiān)聽(tīng)根元素的原生事件,否則組件上使用 v-on 只會(huì)監(jiān)聽(tīng)自定義事件

<my-component v-on:click.native="doSomething"></my-component>

使用.native修飾符來(lái)操作普通HTML標(biāo)簽是會(huì)令事件失效的

鼠標(biāo)按鈕修飾符

鼠標(biāo)按鈕修飾符針對(duì)的就是左鍵袖订、右鍵氮帐、中鍵點(diǎn)擊,有如下:

  • left 左鍵點(diǎn)擊
  • right 右鍵點(diǎn)擊
  • middle 中鍵點(diǎn)擊
<button @click.left="shout(1)">ok</button>
<button @click.right="shout(1)">ok</button>
<button @click.middle="shout(1)">ok</button>

鍵盤修飾符

鍵盤修飾符是用來(lái)修飾鍵盤事件(onkeyup洛姑,onkeydown)的上沐,有如下:
keyCode存在很多,但vue為我們提供了別名楞艾,分為以下兩種:

普通鍵(enter参咙、tab、delete硫眯、space蕴侧、esc、up...)
系統(tǒng)修飾鍵(ctrl两入、alt净宵、meta、shift...)

// 只有按鍵為keyCode的時(shí)候才觸發(fā)
<input type="text" @keyup.keyCode="shout()">

還可以通過(guò)以下方式自定義一些全局的鍵盤碼別名

Vue.config.keyCodes.f2 = 113

v-bind修飾符

v-bind修飾符主要是為屬性進(jìn)行操作裹纳,用來(lái)分別有如下:

  • async
  • prop
  • camel

async

能對(duì)props進(jìn)行一個(gè)雙向綁定

//父組件
<comp :myMessage.sync="bar"></comp> 
//子組件
this.$emit('update:myMessage',params);

以上這種方法相當(dāng)于以下的簡(jiǎn)寫

//父親組件
<comp :myMessage="bar" @update:myMessage="func"></comp>
func(e){
 this.bar = e;
}
//子組件js
func2(){
  this.$emit('update:myMessage',params);
}

使用async需要注意以下兩點(diǎn):

  • 使用sync的時(shí)候择葡,子組件傳遞的事件名格式必須為update:value,其中value必須與子組件中props中聲明的名稱完全一致
  • 注意帶有 .sync 修飾符的 v-bind 不能和表達(dá)式一起使用
  • 將 v-bind.sync 用在一個(gè)字面量的對(duì)象上剃氧,例如 v-bind.sync=”{ title: doc.title }”敏储,是無(wú)法正常工作的

props

設(shè)置自定義標(biāo)簽屬性,避免暴露數(shù)據(jù)朋鞍,防止污染HTML結(jié)構(gòu)

<input id="uid" title="title1" value="1" :index.prop="index">

camel

將命名變?yōu)轳劮迕ㄒ烟恚鐚iew-Box屬性名轉(zhuǎn)換為 viewBox

<svg :viewBox="viewBox"></svg>

三妥箕、應(yīng)用場(chǎng)景

根據(jù)每一個(gè)修飾符的功能,我們可以得到以下修飾符的應(yīng)用場(chǎng)景:

  • .stop:阻止事件冒泡
  • .native:綁定原生事件
  • .once:事件只執(zhí)行一次
  • .self :將事件綁定在自身身上酝碳,相當(dāng)于阻止事件冒泡
  • .prevent:阻止默認(rèn)事件
  • .caption:用于事件捕獲
  • .once:只觸發(fā)一次
  • .keyCode:監(jiān)聽(tīng)特定鍵盤按下
  • .right:右鍵
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矾踱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疏哗,更是在濱河造成了極大的恐慌呛讲,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返奉,死亡現(xiàn)場(chǎng)離奇詭異贝搁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)芽偏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門雷逆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人污尉,你說(shuō)我怎么就攤上這事膀哲。” “怎么了被碗?”我有些...
    開(kāi)封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵某宪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锐朴,道長(zhǎng)兴喂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任焚志,我火速辦了婚禮衣迷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酱酬。我一直安慰自己壶谒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布岳悟。 她就那樣靜靜地躺著佃迄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贵少。 梳的紋絲不亂的頭發(fā)上呵俏,一...
    開(kāi)封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音滔灶,去河邊找鬼普碎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛录平,可吹牛的內(nèi)容都是我干的麻车。 我是一名探鬼主播缀皱,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼动猬!你這毒婦竟也來(lái)了啤斗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赁咙,失蹤者是張志新(化名)和其女友劉穎钮莲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彼水,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崔拥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凤覆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片链瓦。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盯桦,靈堂內(nèi)的尸體忽然破棺而出慈俯,到底是詐尸還是另有隱情,我是刑警寧澤拥峦,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布肥卡,位于F島的核電站,受9級(jí)特大地震影響事镣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揪胃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一璃哟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喊递,春花似錦随闪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至俏讹,卻和暖如春当宴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泽疆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工户矢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人殉疼。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓梯浪,卻偏偏與公主長(zhǎng)得像捌年,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挂洛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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