本文實(shí)例講述了Vue 事件處理操作。分享給大家供大家參考,具體如下:
創(chuàng)新互聯(lián)建站主營(yíng)阿克蘇網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),阿克蘇h5小程序定制開發(fā)搭建,阿克蘇網(wǎng)站營(yíng)銷推廣歡迎阿克蘇等地區(qū)企業(yè)咨詢
1 監(jiān)聽事件
可以用 v-on 指令監(jiān)聽 DOM 事件,并在觸發(fā)時(shí)運(yùn)行一些 JavaScript 代碼。
html:
<div id="app1">
<button v-on:click="counter +=1">遞增</button>
<p>按鈕已被點(diǎn)擊 {{ counter }} 次。</p>
</div>
js:
var app1 = new Vue({
el: "#app1",
data: {
counter: 0
}
});
效果:

2 事件處理方法
然而許多事件處理邏輯會(huì)更為復(fù)雜,所以直接把 JavaScript 代碼寫在 v-on 指令中是不可行的。因此v-on還可以接收一個(gè)需要調(diào)用的方法名稱。
html:
<div id="app2"> <button v-on:click="greet">問候</button> </div>
js:
var app2 = new Vue({
el: "#app2",
data: {
name: 'Deniro'
},
methods: {
greet: function (event) {
//這里的 this 指向的是當(dāng)前 Vue 實(shí)例
console.log('你好 ' + this.name + '!');
if (event) {
console.log(event.target.tagName);
}
}
}
});
效果:

也可以直接調(diào)用 Vue 實(shí)例定義的函數(shù):

3 內(nèi)聯(lián)處理器中的方法
除了直接綁定到一個(gè)方法,也可以在內(nèi)聯(lián) JavaScript 語句中調(diào)用方法:
html:
<div id="app3">
<button v-on:click="greet('你好')">問候</button>
</div>
js:
var app3 = new Vue({
el: "#app3",
methods: {
greet: function (message) {
console.log(message);
}
}
});
有時(shí)也需要在內(nèi)聯(lián)語句處理器中訪問原始的 DOM 事件。可以用特殊變量 $event 把它傳入方法:
html:
<button v-on:click="warn('表單已被禁用',$event)">提交</button>
js:
methods: {
...
warn: function (message,event) {
//訪問原生對(duì)象
if(event){
event.preventDefault();
}
console.log(message);
}
}
4 事件修飾符
在事件處理程序中調(diào)用 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求。盡管我們可以在方法中輕松實(shí)現(xiàn)這點(diǎn),但更好的方式是:方法只有純粹的數(shù)據(jù)邏輯,而不是去處理 DOM 事件細(xì)節(jié)。
為了解決這個(gè)問題,Vue.js 為 v-on 提供了事件修飾符。之前提過,修飾符是由點(diǎn)開頭的指令后綴來表示的。
<!--阻止單擊事件繼續(xù)傳播--> <a v-on:click.stop="doThis"></a> <!--提交事件不再重載頁(yè)面--> <form v-on:submit.prevent="onSubmit"></form> <!--串聯(lián)修飾符--> <a v-on:click.stop.prevent="doThat"></a> <!--只有修飾符--> <form v-on:submit.prevent></form> <!--添加事件監(jiān)聽器時(shí)使用事件捕獲模式--> <!--即元素自身觸發(fā)的事件先在此處理,然后才交由內(nèi)部元素--> <div v-on:click.capture="doThis">...</div> <!--在 event.target 為當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù)--> <!--即事件不是從內(nèi)部元素觸發(fā)的--> <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)擊。
2.1.4 新增
<!--點(diǎn)擊事件只會(huì)觸發(fā)一次--> <a v-on:click.once="doThis"></a>
不像其它只能對(duì)原生的 DOM 事件起作用的修飾符,.once 修飾符還能被用到自定義的組件事件上。
2.3.0 新增
Vue 還對(duì)應(yīng) addEventListener 中的 passive 選項(xiàng)提供了 .passive 修飾符。
<!--滾動(dòng)事件的默認(rèn)行為將會(huì)被立即觸發(fā)(不會(huì)等待 onScroll 事件完成)--> <!--包含 event.preventDefault() 的情況--> <div v-on:scroll.passive="onScroll">...</div>
這個(gè) .passive 修飾符尤其能夠提升移動(dòng)端的性能。
不要把 .passive 和 .prevent 一起使用,因?yàn)?.prevent 將會(huì)被忽略,同時(shí)瀏覽器可能會(huì)向你展示一個(gè)警告。請(qǐng)記住,.passive 會(huì)告訴瀏覽器你不想阻止事件的默認(rèn)行為。
5 按鍵修飾符
在監(jiān)聽鍵盤事件時(shí),我們經(jīng)常需要檢查常見的鍵值。Vue 允許為 v-on 在監(jiān)聽鍵盤事件時(shí)添加按鍵修飾符:
<!--keyCode 為 13 時(shí)調(diào)用 vm.submit()--> <input v-on:keyup.13="submit">
記住所有的 keyCode 比較困難,所以 Vue 為最常用的按鍵提供了別名:
<!--使用按鍵別名--> <input v-on:keyup.enter="submit"> <!--使用縮寫語法--> <input @keyup.enter="submit">
全部的按鍵別名:
可以通過全局 config.keyCodes 對(duì)象自定義按鍵修飾符別名:
//自定義按鍵的修飾符別名 Vue.config.keyCodes.f1 = 112;
自動(dòng)匹配按鍵修飾符
2.5.0 新增
你也可直接將 KeyboardEvent.key 暴露的任意有效按鍵名轉(zhuǎn)換為 kebab-case 來作為修飾符:
<input @keyup.page-down="onPageDown">
在上面的例子中,處理函數(shù)僅在 $event.key === 'PageDown' 時(shí)被調(diào)用。
有一些按鍵 (.esc 以及所有的方向鍵) 在 IE9 中有不同的 key 值, 如果你想支持 IE9,它們的內(nèi)置別名應(yīng)該是首選。
6 系統(tǒng)修飾鍵
2.1.0 新增
可以用如下修飾符來實(shí)現(xiàn)僅在按下相應(yīng)按鍵時(shí)才觸發(fā)鼠標(biāo)或鍵盤事件的監(jiān)聽器。
注意:在 Mac 系統(tǒng)鍵盤上,meta 對(duì)應(yīng) command 鍵 (⌘)。在 Windows 系統(tǒng)鍵盤 meta 對(duì)應(yīng) Windows 徽標(biāo)鍵 (⊞)。在 Sun 操作系統(tǒng)鍵盤上,meta 對(duì)應(yīng)實(shí)心寶石鍵 (◆)。在其他特定鍵盤上,尤其在 MIT 和 Lisp 機(jī)器的鍵盤、以及其后繼產(chǎn)品,比如 Knight 鍵盤、space-cadet 鍵盤,meta 被標(biāo)記為“META”。在 Symbolics 鍵盤上,meta 被標(biāo)記為“META”或者“Meta”。
<!--Alt + C--> <input @keyup.alt.67="clear"> <!--Ctrl + Click--> <div @click.ctrl="doSomething">Do something</div>
請(qǐng)注意修飾鍵與常規(guī)按鍵不同,在和
keyup事件一起用時(shí),事件觸發(fā)時(shí)修飾鍵必須處于按下狀態(tài)。換句話說,只有在按住ctrl的情況下釋放其它按鍵,才能觸發(fā)keyup.ctrl。而單單釋放ctrl也不會(huì)觸發(fā)事件。如果你想要這樣的行為,請(qǐng)為ctrl換用keyCode:keyup.17。
6.1 .exact 修飾符
2.5.0 新增
.exact 修飾符允許你控制由精確的系統(tǒng)修飾符組合觸發(fā)的事件。
<!--Ctrl 或 Alt 或 Shift 被一同按下時(shí)會(huì)觸發(fā)--> <button @click.ctrl="onClick">A</button> <!--有且只有 Ctrl 被按下時(shí)才會(huì)觸發(fā)--> <button @click.ctrl.exact="onCtrlClick">A</button> <!--沒有任何系統(tǒng)修飾符被按下時(shí)才會(huì)觸發(fā)--> <button @click.exact="onClick">A</button>
6.2 鼠標(biāo)按鈕修飾符
2.2.0 新增
這些修飾符會(huì)限制處理函數(shù)僅響應(yīng)特定的鼠標(biāo)按鈕。
7 為什么在 HTML 中監(jiān)聽事件?
你可能注意到這種事件監(jiān)聽的方式違背了關(guān)注點(diǎn)分離 (separation of concern) 這個(gè)長(zhǎng)期以來的優(yōu)良傳統(tǒng)。但不必?fù)?dān)心,因?yàn)樗械?Vue.js 事件處理方法和表達(dá)式都嚴(yán)格綁定在當(dāng)前視圖的 ViewModel 上,它不會(huì)導(dǎo)致任何維護(hù)上的困難。實(shí)際上,使用 v-on 有幾個(gè)好處:
掃一眼 HTML 模板便能輕松定位在 JavaScript 代碼里對(duì)應(yīng)的方法。
因?yàn)槟銦o須在 JavaScript 里手動(dòng)綁定事件,你的 ViewModel 代碼可以是非常純粹的邏輯,和 DOM 完全解耦,更易于測(cè)試。
當(dāng)一個(gè) ViewModel 被銷毀時(shí),所有的事件處理器都會(huì)自動(dòng)被刪除。你無須擔(dān)心如何自己清理它們。
希望本文所述對(duì)大家vue.js程序設(shè)計(jì)有所幫助。
新聞標(biāo)題:Vue事件處理操作實(shí)例詳解
路徑分享:http://www.chinadenli.net/article40/ihocho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、面包屑導(dǎo)航、電子商務(wù)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)