Vue事件處理中的事件對(duì)象的獲取實(shí)現(xiàn)方式
事件對(duì)象 是瀏覽器在觸發(fā)事件(比如點(diǎn)擊按鈕)時(shí),自動(dòng)生成的一個(gè) “數(shù)據(jù)包”,里面存著事件的詳細(xì)信息(比如點(diǎn)了哪個(gè)按鈕、點(diǎn)在頁(yè)面的坐標(biāo)、事件類(lèi)型是點(diǎn)擊還是輸入)。
Vue 里有 2 種方式拿到這個(gè) “數(shù)據(jù)包”,本質(zhì)都是為了拿到事件信息做交互,只是用法場(chǎng)景不同。
方式 1:方法參數(shù)自動(dòng)接收(最簡(jiǎn)單常用)
場(chǎng)景:你只需要事件對(duì)象,不需要傳額外參數(shù)時(shí),用這種方式。
代碼示例
<!-- 按鈕點(diǎn)擊時(shí),Vue 會(huì)自動(dòng)把事件對(duì)象傳給 greet 方法 --> <button @click="greet">點(diǎn)我Greet</button>
greet(cusEvent) {
// cusEvent 就是事件對(duì)象!名字你隨便?。ū热?e、event、myEvent 都可以)
console.log(cusEvent.target.tagName); // 打印觸發(fā)事件的標(biāo)簽名(比如 BUTTON)
}類(lèi)比理解
把 @click="greet" 想象成:
- 你點(diǎn)按鈕 → 瀏覽器 “扔出” 一個(gè)事件對(duì)象 → Vue 自動(dòng) “接住”,并把它當(dāng) “默認(rèn)禮物” 塞給
greet方法。 - 方法里的參數(shù)名(比如
cusEvent),就像你給這個(gè) “禮物” 起的外號(hào),叫啥都行,只要能拿到里面的信息。
方式 2:用 $event 手動(dòng)傳遞(需要傳額外參數(shù)時(shí)用)
場(chǎng)景:你不僅需要事件對(duì)象,還想傳其他參數(shù)(比如 ID、狀態(tài))時(shí),必須用 $event 手動(dòng)把事件對(duì)象傳過(guò)去。
代碼示例
<!-- 點(diǎn)擊時(shí),主動(dòng)用 $event 把事件對(duì)象傳給 greet2,同時(shí)還能傳其他參數(shù)(比如 '額外信息') -->
<button @click="greet2('額外信息', $event)">點(diǎn)我Greet2</button>greet2(msg, event) {
// msg 是你傳的 '額外信息',event 是 $event 對(duì)應(yīng)的事件對(duì)象,這個(gè)名字可以自己定義
console.log(msg); // 打?。侯~外信息
console.log(event.clientX); // 打印點(diǎn)擊位置的 X 坐標(biāo)
}類(lèi)比理解
把 @click="greet2('額外信息', $event)" 想象成:
你點(diǎn)按鈕時(shí),想給 greet2 方法傳 2 個(gè) “禮物”:
- 第一個(gè)禮物:你手動(dòng)寫(xiě)的
'額外信息'(自定義參數(shù))。 - 第二個(gè)禮物:必須用
$event這個(gè) “固定包裝”,把事件對(duì)象包起來(lái)傳過(guò)去。
方法里的參數(shù)(msg, event)要和傳遞順序?qū)?yīng),這樣才能正確拿到兩個(gè) “禮物”。
兩種方式的核心區(qū)別
| 對(duì)比項(xiàng) | 方式 1(自動(dòng)接收) | 方式 2(用 $event 手動(dòng)傳) |
|---|---|---|
| 何時(shí)用 | 只需要事件對(duì)象,不需要額外參數(shù)時(shí) | 需要同時(shí)傳事件對(duì)象 + 其他自定義參數(shù)時(shí) |
| 模板寫(xiě)法 | @click="方法名"(無(wú)需傳參) | @click="方法名(自定義參數(shù), $event)" |
| 方法參數(shù)名 | 自定義(比如 cusEvent、e 都行) | 要和傳遞順序?qū)?yīng)(比如 msg, event) |
| 是否依賴(lài) $event | 不依賴(lài),Vue 自動(dòng)傳事件對(duì)象 | 必須用 $event 手動(dòng)傳事件對(duì)象 |
舉個(gè)生活例子加深理解
假設(shè)你是餐廳服務(wù)員(方法),客人(按鈕)點(diǎn)餐(觸發(fā)事件):
- 方式 1:客人只說(shuō) “結(jié)賬”(
@click="greet"),系統(tǒng)自動(dòng)給你遞上 “賬單”(事件對(duì)象),你直接處理賬單(greet(cusEvent))。 - 方式 2:客人說(shuō) “結(jié)賬,再加一份小吃”(
@click="greet2('加小吃', $event)"),你需要同時(shí)拿到 “賬單”(事件對(duì)象,用$event傳)和 “加小吃” 的要求(自定義參數(shù)),再一起處理。
總結(jié)
- 事件對(duì)象 是瀏覽器給的 “事件詳情包”,Vue 提供了 2 種拿包方式。
- 簡(jiǎn)單場(chǎng)景用 方式 1(自動(dòng)接收),復(fù)雜場(chǎng)景(需要傳額外數(shù)據(jù))用 方式 2(
$event手動(dòng)傳)。 - 記住
$event是 Vue 規(guī)定的 “傳事件對(duì)象的固定語(yǔ)法”,而方法里的參數(shù)名可以自己隨便取~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁(yè)應(yīng)用
這篇文章主要給大家介紹了關(guān)于Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁(yè)應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue CLI3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
基于Vue3的打卡計(jì)時(shí)器實(shí)現(xiàn)方案
在日常工作和生活中,我們經(jīng)常需要記錄時(shí)間間隔,比如工作打卡、學(xué)習(xí)時(shí)長(zhǎng)、項(xiàng)目耗時(shí)等,今天我將為大家介紹一個(gè)基于Vue3的打卡計(jì)時(shí)器實(shí)現(xiàn)方案,需要的朋友可以參考下2026-03-03
vue實(shí)現(xiàn)類(lèi)似淘寶商品評(píng)價(jià)頁(yè)面星級(jí)評(píng)價(jià)及上傳多張圖片功能
最近在寫(xiě)一個(gè)關(guān)于vue的商城項(xiàng)目,然后集成在移動(dòng)端中,開(kāi)發(fā)需求中有一界面,類(lèi)似淘寶商城評(píng)價(jià)界面!接下來(lái)通過(guò)本文給大家分享vue實(shí)現(xiàn)類(lèi)似淘寶商品評(píng)價(jià)頁(yè)面星級(jí)評(píng)價(jià)及上傳多張圖片功能,需要的朋友參考下吧2018-10-10
vue-cli腳手架搭建的項(xiàng)目去除eslint驗(yàn)證的方法
今天小編就為大家分享一篇vue-cli腳手架搭建的項(xiàng)目去除eslint驗(yàn)證的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
詳解?Vue虛擬DOM如何提高前端開(kāi)發(fā)效率
這篇文章主要為大家介紹了詳解?Vue虛擬DOM如何提高前端開(kāi)發(fā)效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
vue2.0 better-scroll 實(shí)現(xiàn)移動(dòng)端滑動(dòng)的示例代碼
本篇文章主要介紹了vue2.0 better-scroll 實(shí)現(xiàn)移動(dòng)端滑動(dòng)的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2018-01-01

