Vue3 之 Vue 事件處理指南
一、基本事件處理
使用v-on指令(簡(jiǎn)稱@),我們可以監(jiān)聽(tīng)DOM事件并運(yùn)行處理程序方法或內(nèi)聯(lián)Javascript。
// v-on 指令 <div v-on:click='handleClick' /> // OR <div @click='handleClick' />
二、向父組件發(fā)出自定義事件
任何Web框架中的常見(jiàn)用例都是希望子組件能夠向其父組件發(fā)出事件,這也是雙向數(shù)據(jù)綁定原理。
常見(jiàn)一個(gè)示例是將數(shù)據(jù)從 input組件發(fā)送到父表單。
根據(jù)我們使用的是Options API還是Composition API,發(fā)出事件的語(yǔ)法是不同的。
在 Options API 中,我們可以簡(jiǎn)單地調(diào)用this.$emit(eventName, payload) ,示例如下:
export default {
methods: {
handleUpdate: () => {
this.$emit('update', 'Hello World')
}
}
}
但是,Composition API 使用方式與此不同。 需要在 Vue3 提供的 setup方法使用emit方法。
只要導(dǎo)入context對(duì)象,就可以使用與Options API相同的參數(shù)調(diào)用emit。
export default {
setup (props, context) {
const handleUpdate = () => {
context.emit('update', 'Hello World')
}
return { handleUpdate }
}
}
當(dāng)然,我在項(xiàng)目中經(jīng)常使用解構(gòu)的方式來(lái)使用:
export default {
setup (props, { emit }) {
const handleUpdate = () => {
emit('update', 'Hello World')
}
return { handleUpdate }
}
}
完美!
無(wú)論我們使用Options 還是 Composition API,父組監(jiān)聽(tīng)的方式都是一樣的。
<HelloWorld @update='inputUpdated'/>
首先,我們可以在模板中使用$ event訪問(wèn)傳遞的值。
如果在組件 emit 出去方法有傳遞值,我們可以通過(guò)兩種不同的方式捕獲它,這取決于我們是使用內(nèi)聯(lián)還是使用方法。
第一種:是在模板中使用$event訪問(wèn)傳遞的值。
<HelloWorld @update='inputUpdated($event)'/>
第二種:使用方法來(lái)處理事件,則傳遞的值將作為第一個(gè)參數(shù)自動(dòng)傳遞給我們的方法。
<HelloWorld @update='inputUpdated'/>
// ...
methods: {
inputUpdated: (value) => {
console.log(value) // WORKS TOO
}
}
三、鼠標(biāo)修飾符
下面是我們可以在v-on指令中捕獲的主要DOM鼠標(biāo)事件列表:
<div @mousedown='handleEvent' @mouseup='handleEvent' @click='handleEvent' @dblclick='handleEvent' @mousemove='handleEvent' @mouseover='handleEvent' @mousewheel='handleEvent' @mouseout='handleEvent' > Interact with Me! </div>
對(duì)于單擊事件,我們還可以添加鼠標(biāo)事件修飾符來(lái)限制哪個(gè)鼠標(biāo)按鈕將觸發(fā)我們的事件。有三個(gè): left,right 和 middle。
<!-- 這只會(huì)觸發(fā)鼠標(biāo)左鍵 --> <div @mousedown.left='handleLeftClick'> Left </div>
四、鍵盤(pán)修飾符
我們可以聽(tīng)三個(gè)DOM鍵盤(pán)事件:
<input type='text' placeholder='Type something' @keypress='handleKeyPressed' @keydown='handleKeyDown' @keyup='handleKeyUp' />
通常,我們想檢測(cè)某個(gè)鍵上的這些事件,有兩種方法可以執(zhí)行此操作。
keycodes- Vue具有某些鍵的別名(
enter,tab,delete,esc,space,up,down,left,right)
<!-- Trigger even when enter is released --> <input type='text' placeholder='Type something' @keyup.enter='handleEnter' /> <!-- OR --> <input type='text' placeholder='Type something' @keyup.13='handleEnter' />
五、系統(tǒng)修飾符
對(duì)于某些項(xiàng)目,我們可能只想在用戶按下修飾鍵的情況下觸發(fā)事件。 修飾鍵類似于Command或shift。
在Vue中,有四個(gè)系統(tǒng)修飾符。
shiftaltctrlmeta(在mac上是CMD,在Windows上是Windows鍵)
這對(duì)于在Vue應(yīng)用程序中創(chuàng)建諸如自定義鍵盤(pán)快捷鍵之類的功能非常有用。
<!-- 自定義快捷方式,楊使用Shift + 8 創(chuàng)建列表 --> <input type='text' placeholder='Type something' @keyup.shift.56='createList' />
在Vue文檔中,還有一個(gè)exact的修飾符,以確保僅在按下我們指定的鍵且沒(méi)有其他鍵的情況下才觸發(fā)事件。
<!-- 自定義快捷方式,只有Shift + 8 這兩個(gè)按下時(shí)才會(huì)創(chuàng)建列表--> <input type='text' placeholder='Type something' @keyup.shift.56.exact='createList' />
六、事件修飾符
對(duì)于所有DOM事件,我們可以使用一些修飾符來(lái)更改其運(yùn)行方式。 無(wú)論是停止傳播還是阻止默認(rèn)操作,Vue都有兩個(gè)內(nèi)置的DOM事件修飾符。
<!-- 阻止默認(rèn)行為 --> <form @submit.prevent> <!-- 阻止冒泡 --> <form @submit.stop='submitForm'> <!-- 阻止默認(rèn)行為和冒泡 --> <form @submit.stop.prevent='submitForm'> <!-- 防止事件被多次觸發(fā) --> <div @close.once='handleClose'>
代碼部署后可能存在的BUG沒(méi)法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具Fundebug。
到此這篇關(guān)于Vue3 之 Vue 事件處理指南的文章就介紹到這了,更多相關(guān)Vue 事件處理指南內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VUE v-for循環(huán)中每個(gè)item節(jié)點(diǎn)動(dòng)態(tài)綁定不同函數(shù)的實(shí)例
今天小編就為大家分享一篇VUE v-for循環(huán)中每個(gè)item節(jié)點(diǎn)動(dòng)態(tài)綁定不同函數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題
這篇文章主要介紹了解決VUE打包后與nginx代理出現(xiàn)加載速度超級(jí)慢的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
vue測(cè)試環(huán)境打包與生產(chǎn)環(huán)境打包文件數(shù)量不一致解決方案
這篇文章主要為大家介紹了vue測(cè)試環(huán)境打包與生產(chǎn)環(huán)境打包文件數(shù)量不一致的解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
手寫(xiě)Vue內(nèi)置組件component的實(shí)現(xiàn)示例
本文主要介紹了手寫(xiě)Vue內(nèi)置組件component的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Vue實(shí)現(xiàn)PC端分辨率自適應(yīng)的示例代碼
本文主要介紹了Vue實(shí)現(xiàn)PC端分辨率自適應(yīng)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Vue文件如何代替?zhèn)鹘y(tǒng)的HTML文件
隨著前端工程化的不斷推進(jìn),傳統(tǒng)的HTML、CSS、JavaScript三者分離的開(kāi)發(fā)模式逐漸顯露出一些不足之處,尤其是在構(gòu)建復(fù)雜的單頁(yè)應(yīng)用(SPA)時(shí),Vue.js作為一個(gè)現(xiàn)代化的前端框架,提供了多種工具和技術(shù)來(lái)簡(jiǎn)化開(kāi)發(fā)流程,本文將探討.vue文件是如何替代傳統(tǒng)HTML文件的角色2024-10-10
vue?cli3配置image-webpack-loader方式
這篇文章主要介紹了vue?cli3配置image-webpack-loader方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Vue中filter使用及根據(jù)id刪除數(shù)組元素方式
這篇文章主要介紹了Vue中filter使用及根據(jù)id刪除數(shù)組元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

