vue事件修飾符

事件處理

如果需要在內(nèi)聯(lián)語(yǔ)句處理器中訪問(wèn)原生DOM事件原献×罂可以使用特殊變量$event,把它傳入到methods中的方法中姑隅。

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

  • .stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡

  • .prevent:等同于JavaScript中的event.preventDefault()叮盘,防止執(zhí)行預(yù)設(shè)的行為(如果事件可取消秩贰,則取消該事件,而不停止事件的進(jìn)一步傳播)

  • .capture:與事件冒泡的方向相反柔吼,事件捕獲由外到內(nèi)

  • .self:只會(huì)觸發(fā)自己范圍內(nèi)的事件毒费,不包含子元素

  • .once:只會(huì)觸發(fā)一次

.stop 防止事件冒泡

冒泡事件:嵌套兩三層父子關(guān)系,然后所有都有點(diǎn)擊事件愈魏,點(diǎn)擊子節(jié)點(diǎn)觅玻,就會(huì)觸發(fā)從內(nèi)至外 子節(jié)點(diǎn)-》父節(jié)點(diǎn)的點(diǎn)擊事件

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="html" cid="n17" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<div id="app">
<div class="outeer" @click="outer">
<div class="middle" @click="middle">
      <button @click="inner">點(diǎn)擊我(_)</button>
</div>
</div>
<p>{{ message }}</p>
</div>
?
let app = new Vue({
el: '#app',
data () {
return { message: '測(cè)試冒泡事件' } },
methods: {
    inner: function () {
this.message = 'inner: 這是最里面的Button'
},
middle: function () {
this.message = 'middle: 這是中間的Div'
},
outer: function () {
this.message = 'outer: 這是外面的Div'
}
}
})</pre>

防止冒泡事件的寫法是:在點(diǎn)擊上加上.stop相當(dāng)于在每個(gè)方法中調(diào)用了等同于event.stopPropagation(),點(diǎn)擊子節(jié)點(diǎn)不會(huì)捕獲到父節(jié)點(diǎn)的事件

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="html" cid="n19" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<div id="app">
<div class="outeer" @click.stop="outer">
<div class="middle" @click.stop="middle">
      <button @click.stop="inner">點(diǎn)擊我(_)</button>
</div>
</div>
</div></pre>

.prevent取消默認(rèn)事件

.prevent等同于JavaScript的event.preventDefault()培漏,用于取消默認(rèn)事件溪厘。比如我們頁(yè)面的<a href="#">標(biāo)簽,當(dāng)用戶點(diǎn)擊時(shí)牌柄,通常在瀏覽器的網(wǎng)址列出#

.capture 捕獲事件

捕獲事件:嵌套兩三層父子關(guān)系畸悬,然后所有都有點(diǎn)擊事件,點(diǎn)擊子節(jié)點(diǎn)珊佣,就會(huì)觸發(fā)從外至內(nèi) 父節(jié)點(diǎn)-》子節(jié)點(diǎn)的點(diǎn)擊事件

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="html" cid="n24" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<div id="app">
<div class="outeer" @click.capture="outer">
<div class="middle" @click.capture="middle">
      <button @click.capture="inner">點(diǎn)擊我(_)</button>
</div>
</div>
</div></pre>

img

.self

修飾符.self只會(huì)觸發(fā)自己范圍內(nèi)的事件蹋宦,不會(huì)包含子元素。

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n29" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<div id="app">
<div class="outeer" @click.self="outer">
<div class="middle" @click.self="middle">
      <button @click.stop="inner">點(diǎn)擊我(_)</button>
</div>
</div>
</div></pre>

Vue的Methods和事件處理

.once 只執(zhí)行一次點(diǎn)擊

如果我們?cè)?code>@click事件上添加.once修飾符咒锻,只要點(diǎn)擊按鈕只會(huì)執(zhí)行一次冷冗。

鍵盤修飾符

在JavaScript事件中除了前面所說(shuō)的事件,還有鍵盤事件惑艇,也經(jīng)常需要監(jiān)測(cè)常見(jiàn)的鍵值蒿辙。在Vue中允許v-on在監(jiān)聽(tīng)鍵盤事件時(shí)添加關(guān)鍵修飾符。記住所有的keyCode比較困難敦捧,所以Vue為最常用的鍵盤事件提供了別名:

  • .enter:回車鍵

  • .tab:制表鍵

  • .delete:含deletebackspace

  • .esc:返回鍵

  • .space: 空格鍵

  • .up:向上鍵

  • .down:向下鍵

  • .left:向左鍵

  • .right:向右鍵

img

鼠標(biāo)修飾符

鼠標(biāo)修飾符用來(lái)限制處理程序監(jiān)聽(tīng)特定的滑鼠按鍵须板。常見(jiàn)的有:

  • .left:鼠標(biāo)左鍵

  • .middle:鼠標(biāo)中間滾輪

  • .right:鼠標(biāo)右鍵

修飾鍵

可以用如下修飾符開(kāi)啟鼠標(biāo)或鍵盤事件監(jiān)聽(tīng),使在按鍵按下時(shí)發(fā)生響應(yīng):

  • .ctrl

  • .alt

  • .shift

  • .meta

自定義按鍵修飾符別名

在Vue中可以通過(guò)config.keyCodes自定義按鍵修飾符別名兢卵。例如,由于預(yù)先定義了keycode 116(即F5)的別名為f5绪颖,因此在文字輸入框中按下F5秽荤,會(huì)觸發(fā)prompt方法甜奄,出現(xiàn)alert

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n77" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<div id="app">
<input type="text" v-on:keydown.f5="prompt()">
</div>
?
Vue.config.keyCodes.f5 = 116;
?
let app = new Vue({
el: '#app',
methods: {
prompt: function() {
alert('我是 F5窃款!');
}
}
});</pre>

總結(jié)

在Vue中课兄,使用v-on來(lái)給元素綁定事件,而為了更好的處理邏輯方面的事物晨继,Vue提供了一個(gè)methods烟阐。在methods中定義一些方法,這些方法可以幫助我們處理一些邏輯方面的事情紊扬。而在這篇文章中蜒茄,我們主要介紹了一些事件的修飾符,比如常見(jiàn)的阻止事件冒泡餐屎,鍵盤修飾符等檀葛。除此之外,還提供了config.keyCodes提供自定義按鍵修飾符別名腹缩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屿聋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子藏鹊,更是在濱河造成了極大的恐慌润讥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盘寡,死亡現(xiàn)場(chǎng)離奇詭異象对,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宴抚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門勒魔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人菇曲,你說(shuō)我怎么就攤上這事冠绢。” “怎么了常潮?”我有些...
    開(kāi)封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵弟胀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我喊式,道長(zhǎng)孵户,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任岔留,我火速辦了婚禮夏哭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘献联。我一直安慰自己竖配,他們只是感情好何址,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著进胯,像睡著了一般用爪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胁镐,一...
    開(kāi)封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天偎血,我揣著相機(jī)與錄音,去河邊找鬼盯漂。 笑死颇玷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宠能。 我是一名探鬼主播亚隙,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼违崇!你這毒婦竟也來(lái)了阿弃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤羞延,失蹤者是張志新(化名)和其女友劉穎渣淳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伴箩,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡入愧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗤谚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棺蛛。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巩步,靈堂內(nèi)的尸體忽然破棺而出旁赊,到底是詐尸還是另有隱情,我是刑警寧澤椅野,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布终畅,位于F島的核電站,受9級(jí)特大地震影響竟闪,放射性物質(zhì)發(fā)生泄漏离福。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一炼蛤、第九天 我趴在偏房一處隱蔽的房頂上張望妖爷。 院中可真熱鬧,春花似錦鲸湃、人聲如沸赠涮。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笋除。三九已至,卻和暖如春炸裆,著一層夾襖步出監(jiān)牢的瞬間垃它,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工烹看, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留国拇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓惯殊,卻偏偏與公主長(zhǎng)得像酱吝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子土思,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348