Vue3 之 Vue 事件處理指南
一、基本事件處理
使用v-on指令
(簡稱@
),我們可以監(jiān)聽DOM
事件并運行處理程序方法或內(nèi)聯(lián)Javascript
。
// v-on 指令 <div v-on:click='handleClick' /> // OR <div @click='handleClick' />
二、向父組件發(fā)出自定義事件
任何Web框架中的常見用例都是希望子組件能夠向其父組件發(fā)出事件,這也是雙向數(shù)據(jù)綁定原理。
常見一個示例是將數(shù)據(jù)從 input
組件發(fā)送到父表單。
根據(jù)我們使用的是Options API
還是Composition API
,發(fā)出事件的語法是不同的。
在 Options API
中,我們可以簡單地調(diào)用this.$emit(eventName, payload
) ,示例如下:
export default { methods: { handleUpdate: () => { this.$emit('update', 'Hello World') } } }
但是,Composition API
使用方式與此不同。 需要在 Vue3
提供的 setup
方法使用emit
方法。
只要導(dǎo)入context
對象,就可以使用與Options API
相同的參數(shù)調(diào)用emit。
export default { setup (props, context) { const handleUpdate = () => { context.emit('update', 'Hello World') } return { handleUpdate } } }
當然,我在項目中經(jīng)常使用解構(gòu)的方式來使用:
export default { setup (props, { emit }) { const handleUpdate = () => { emit('update', 'Hello World') } return { handleUpdate } } }
完美!
無論我們使用Options
還是 Composition API
,父組監(jiān)聽的方式都是一樣的。
<HelloWorld @update='inputUpdated'/>
首先,我們可以在模板中使用$ event訪問傳遞
的值。
如果在組件 emit
出去方法有傳遞值,我們可以通過兩種不同的方式捕獲它,這取決于我們是使用內(nèi)聯(lián)還是使用方法。
第一種:是在模板中使用$event
訪問傳遞的值。
<HelloWorld @update='inputUpdated($event)'/>
第二種:使用方法來處理事件,則傳遞的值將作為第一個參數(shù)自動傳遞給我們的方法。
<HelloWorld @update='inputUpdated'/> // ... methods: { inputUpdated: (value) => { console.log(value) // WORKS TOO } }
三、鼠標修飾符
下面是我們可以在v-on指令中捕獲的主要DOM鼠標事件列表:
<div @mousedown='handleEvent' @mouseup='handleEvent' @click='handleEvent' @dblclick='handleEvent' @mousemove='handleEvent' @mouseover='handleEvent' @mousewheel='handleEvent' @mouseout='handleEvent' > Interact with Me! </div>
對于單擊事件,我們還可以添加鼠標事件修飾符來限制哪個鼠標按鈕將觸發(fā)我們的事件。有三個: left,right
和 middle
。
<!-- 這只會觸發(fā)鼠標左鍵 --> <div @mousedown.left='handleLeftClick'> Left </div>
四、鍵盤修飾符
我們可以聽三個DOM鍵盤事件:
<input type='text' placeholder='Type something' @keypress='handleKeyPressed' @keydown='handleKeyDown' @keyup='handleKeyUp' />
通常,我們想檢測某個鍵上的這些事件,有兩種方法可以執(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)修飾符
對于某些項目,我們可能只想在用戶按下修飾鍵的情況下觸發(fā)事件。 修飾鍵類似于Command或shift。
在Vue中,有四個系統(tǒng)修飾符。
shift
alt
ctrl
meta
(在mac
上是CMD
,在Windows
上是Windows鍵
)
這對于在Vue
應(yīng)用程序中創(chuàng)建諸如自定義鍵盤快捷鍵之類的功能非常有用。
<!-- 自定義快捷方式,楊使用Shift + 8 創(chuàng)建列表 --> <input type='text' placeholder='Type something' @keyup.shift.56='createList' />
在Vue
文檔中,還有一個exact
的修飾符,以確保僅在按下我們指定的鍵且沒有其他鍵的情況下才觸發(fā)事件。
<!-- 自定義快捷方式,只有Shift + 8 這兩個按下時才會創(chuàng)建列表--> <input type='text' placeholder='Type something' @keyup.shift.56.exact='createList' />
六、事件修飾符
對于所有DOM
事件,我們可以使用一些修飾符來更改其運行方式。 無論是停止傳播還是阻止默認操作,Vue
都有兩個內(nèi)置的DOM
事件修飾符。
<!-- 阻止默認行為 --> <form @submit.prevent> <!-- 阻止冒泡 --> <form @submit.stop='submitForm'> <!-- 阻止默認行為和冒泡 --> <form @submit.stop.prevent='submitForm'> <!-- 防止事件被多次觸發(fā) --> <div @close.once='handleClose'>
代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行l(wèi)og 調(diào)試,這邊順便給大家推薦一個好用的BUG監(jiān)控工具Fundebug。
到此這篇關(guān)于Vue3 之 Vue 事件處理指南的文章就介紹到這了,更多相關(guān)Vue 事件處理指南內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中集成省市區(qū)街四級地址組件的實現(xiàn)過程
我們在開發(fā)中常會遇到選擇地址的需求,有時候只需要選擇省就可以,有時候則需要選擇到市、縣,以至于鄉(xiāng)鎮(zhèn),甚至哪個村都有可能,下面這篇文章主要給大家介紹了關(guān)于vue中集成省市區(qū)街四級地址組件的相關(guān)資料,需要的朋友可以參考下2022-12-12vue中echarts圖表大小適應(yīng)窗口大小且不需要刷新案例
這篇文章主要介紹了vue中echarts圖表大小適應(yīng)窗口大小且不需要刷新案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07基于vue3開發(fā)mobile-table適用于移動端表格
這篇文章主要給大家介紹了關(guān)于如何基于vue3開發(fā)mobile-table適用于移動端表格的相關(guān)資料,需要的朋友可以參考下2024-03-03