Vue事件修飾符使用詳細(xì)介紹
1 .prevent阻止默認(rèn)事件
.prevent可以阻止默認(rèn)事件的發(fā)生。
例如,阻止a標(biāo)簽的跳轉(zhuǎn)
<div id="app">
<a rel="external nofollow" rel="external nofollow" @click.prevent>百度</a>
</div>
<script>
var vm = new Vue({
el: "#app"
})
</script>
除此之外,還有一種方式是使用之前的e.preventDefault()來阻止默認(rèn)行為,代碼如下:
<div id="app">
<a rel="external nofollow" rel="external nofollow" @click="handleClick">百度</a>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick(e) {
e.preventDefault();
}
}
})
</script>
這時(shí)點(diǎn)擊頁面上的標(biāo)簽則不會(huì)進(jìn)行頁面的跳轉(zhuǎn)。
2 .stop阻止事件冒泡
DOM有事件冒泡的特點(diǎn),使用.stop可以阻止事件冒泡,代碼如下:
<div id="app">
<div @click="handleClick">
<button @click.stop="handleClick">點(diǎn)擊提示</button>
</div>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick(e) {
console.log("事件觸發(fā)");
}
}
})
</script>或者使用e.stopPropagation()也可以阻止事件冒泡,代碼如下:
<div id="app">
<div @click="handleClick">
<button @click="handleClick">點(diǎn)擊提示</button>
</div>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick(e) {
e.stopPropagation(); // 阻止事件冒泡
console.log("事件觸發(fā)");
}
}
})
</script>3 .once事件只觸發(fā)一次
.once可以讓事件只觸發(fā)一次,當(dāng)再次觸發(fā)事件事,該事件會(huì)失效。
例如,頁面上有一個(gè)按鈕,每次點(diǎn)擊按鈕都會(huì)彈窗提示
<div id="app">
<button @click="handleClick">點(diǎn)擊</button>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick() {
alert("點(diǎn)擊事件");
}
}
})
</script>
如果為click事件加上事件修飾符.once,那么該彈窗只會(huì)出現(xiàn)一次,再次點(diǎn)擊按鈕則不會(huì)彈窗,示例代碼如下:
<div id="app">
<button @click.once="handleClick">點(diǎn)擊</button>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick() {
alert("點(diǎn)擊事件");
}
}
})
</script>4 .capture使用事件捕獲模式
在DOM事件流中,我們都知道DOM事件會(huì)先捕獲然后冒泡,在冒泡階段才會(huì)處理事件,因此在下面的示例中,點(diǎn)擊按鈕,會(huì)先觸發(fā)handleClick2()輸出2,然后觸發(fā)handleClick1()輸出1,代碼如下:
<div id="app">
<div @click="handleClick1">
<button @click="handleClick2">點(diǎn)擊</button>
</div>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick1() {
console.log(1);
},
handleClick2() {
console.log(2);
}
}
})
</script>
但是如果我們想在事件捕獲時(shí)就處理事件,可以使用.capture來處理,這樣點(diǎn)擊按鈕時(shí),會(huì)先觸發(fā)handleClick1()輸出1,然后觸發(fā)handleClick2()輸出2,示例代碼如下:
<div id="app">
<div @click.capture="handleClick1">
<button @click="handleClick2">點(diǎn)擊</button>
</div>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick1() {
console.log(1);
},
handleClick2() {
console.log(2);
}
}
})
</script>
5 .self當(dāng)e.target是當(dāng)前操作的元素才觸發(fā)事件
在冒泡或者捕獲時(shí),e.target會(huì)指向觸發(fā)事件的對(duì)象。例如,在下面代碼中,點(diǎn)擊按鈕,雖然由于事件冒泡會(huì)將上面div的事件也進(jìn)行觸發(fā),但是它們的e.target都是觸發(fā)事件的按鈕。
<div id="app">
<div @click="handleClick">
<button @click="handleClick">點(diǎn)擊</button>
</div>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick(e) {
console.log(e.target);
}
}
})
</script>
當(dāng)使用.self來修飾時(shí),那么只有當(dāng)觸發(fā)事件的對(duì)象和當(dāng)前操作的元素一致時(shí),才會(huì)觸發(fā)事件,代碼如下:
<div id="app">
<div @click.self="handleClick">
<button @click="handleClick">點(diǎn)擊</button>
</div>
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
handleClick(e) {
console.log(e.target);
}
}
})
</script>
在上面的代碼中,點(diǎn)擊按鈕后只觸發(fā)了一次handleClick()事件,這是因?yàn)橥饷娴膁iv并不是當(dāng)前的e.target,因此不會(huì)觸發(fā)handleClick()事件。
6 .passive事件的默認(rèn)行為立即執(zhí)行
.passive可以讓事件的默認(rèn)行為立即執(zhí)行,無需等待事件回調(diào)執(zhí)行完畢,一般在移動(dòng)端會(huì)使用多一些。
7 .鍵盤事件
Vue為我們提供了常用的鍵盤事件,具體如下:
| 修飾符 | 鍵盤事件 |
|---|---|
| .enter | 按下回車鍵后觸發(fā) |
| .delete | 按下backspace或者delete鍵觸發(fā) |
| .esc | 按下esc鍵后觸發(fā) |
| .space | 按下空格鍵后觸發(fā) |
| .up | 按下上鍵后觸發(fā) |
| .down | 按下下鍵后觸發(fā) |
| .left | 按下左鍵后觸發(fā) |
| .right | 按下右鍵后觸發(fā) |
| .tab | 按下tab鍵觸發(fā),該按鍵配合keydown事件使用,否則會(huì)切走焦點(diǎn) |
示例:按下backspace或者delete鍵時(shí)輸出輸入框中的內(nèi)容
<div id="app">
<input type="text" @keyup.delete="demo">
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
demo(e) {
console.log(e.target.value);
}
}
})
</script>

但是如果我們想為除了上面的鍵之外的鍵綁定事件,這時(shí)就可以使用按鍵原始的key值(注意不是keyCode)去綁定事件。鍵的key值可以通過e.key來獲取到,比如說獲取q鍵的key值,代碼如下:
<div id="app">
<input type="text" @keyup="getQ">
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
getQ(e) {
console.log(e.key); // 輸出key值
console.log(e.keyCode); // 輸出keyCode
}
}
})
</script>
可以看到q的key值是q,keyCode是81,我們使用q可以為該鍵綁定事件,代碼如下:
<div id="app">
<input type="text" @keyup.q="qClick">
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
qClick() {
console.log("按下了q鍵");
}
}
})
</script>
除了以上兩種方式外,還有兩種方式可以為鍵盤綁定事件:
(1)使用keyCode綁定事件,例如回車鍵的keyCode為13,按下回車鍵輸出輸入框中數(shù)字,不過該方式并不推薦,因?yàn)椴煌逆I盤keyCode可能不同,示例代碼如下:
<div id="app">
<input type="text" @keydown.13="demo">
</div>
<script>
var vm = new Vue({
el: "#app",
methods: {
demo(e) {
console.log(e.target.value);
}
}
})
</script>(2)使用定制按鍵別名的方式綁定事件,語法如下:
Vue.config.keyCodes.自定義鍵名 = 鍵碼;
為回車鍵綁定事件,示例代碼如下:
<div id="app">
<input type="text" @keyup.huiche="demo">
</div>
<script>
Vue.config.keyCodes.huiche = 13; // 綁定回車事件
var vm = new Vue({
el: "#app",
methods: {
demo(e) {
console.log(e.target.value);
}
}
})
</script>注意:
- 對(duì)于大寫鎖定鍵來說,它的key值是
CapsLock,因此在為它綁定事件時(shí),必須將組成它的兩個(gè)單詞小寫,并且使用“-”將他們連接,也就是說,它使用caps-lock來綁定事件 ctrl、alt、shift、meta鍵是系統(tǒng)修飾鍵,如果為它們綁定keyup事件不會(huì)立即起作用,它們起作用的方式為:按下系統(tǒng)修飾鍵——>按下其他鍵——>釋放其他鍵,這樣事件才會(huì)被觸發(fā)
到此這篇關(guān)于Vue事件修飾符使用詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Vue事件修飾符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-video-player?播放m3u8視頻流的實(shí)現(xiàn)
本文主要介紹了vue-video-player?播放m3u8視頻流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Vue3 SFC 和 TSX 方式自定義組件實(shí)現(xiàn) v-model的詳細(xì)
v-model 是 vue3 中的一個(gè)內(nèi)置指令,很多表單元素都可以使用這個(gè)屬性,如 input、checkbox 等,咱可以在自定義組件中實(shí)現(xiàn) v-model,這篇文章主要介紹了Vue3 SFC 和 TSX 方式自定義組件實(shí)現(xiàn) v-model,需要的朋友可以參考下2022-10-10
在vue中實(shí)現(xiàn)清除echarts上次保留的數(shù)據(jù)(親測(cè)有效)
這篇文章主要介紹了在vue中實(shí)現(xiàn)清除echarts上次保留的數(shù)據(jù)(親測(cè)有效),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Vue+Java 通過websocket實(shí)現(xiàn)服務(wù)器與客戶端雙向通信操作
這篇文章主要介紹了Vue+Java 通過websocket實(shí)現(xiàn)服務(wù)器與客戶端雙向通信操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
vue實(shí)現(xiàn)登錄時(shí)的圖片驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)登錄時(shí)的圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04

