vue 自定義組件的事件綁定

基本知識點

🎯什么是自定義事件

自定義事件是子組件向父組件發送消息的機制,通常用于通知父組件發生了某些行為或狀態變化。

📌 基本語法

子組件觸發事件($emit)

this.$emit('事件名', 參數);

或在

const emit = defineEmits([‘事件名’]);
emit(‘事件名’, 參數);

父組件監聽事件

<Child @事件名="父組件方法" />

??完整例子(Vue 2 & 3 通用)

子組件 Child.vue<template><button @click="handleClick">點我</button>
</template><script>
export default {methods: {handleClick() {this.$emit('my-event', '來自子組件的數據');}}
}
</script>父組件 Parent.vue<template><Child @my-event="onChildEvent" />
</template><script>
import Child from './Child.vue';export default {components: { Child },methods: {onChildEvent(data) {console.log('收到子組件數據:', data);}}
}
</script>

🚀 Vue 3

子組件
<template><button @click="emitEvent">點我</button>
</template><script setup>
const emit = defineEmits(['custom-event'])function emitEvent() {emit('custom-event', 'Hello from child')
}
</script>

進階使用

🔁 自定義 v-model

Vue 2 中

v-model 默認綁定 value 和 input,可以通過修改 model 配置自定義:

export default {model: {prop: 'checked',event: 'change'},props: ['checked'],methods: {toggle() {this.$emit('change', !this.checked)}}
}

使用方式:

<MyCheckbox v-model="isChecked" />

Vue 3 中(支持多個 v-model)

<!-- 子組件 -->
<script setup>
defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])function updateValue(val) {emit('update:modelValue', val)
}
</script>

使用方式:

<MyInput v-model="inputValue" />

多個綁定:

<MyInput v-model:title="title" v-model:content="content" />

🪞 事件透傳(事件代理)

有時需要把子組件的事件直接傳遞給更高層的父組件。

方法一:手動轉發

<!-- 中間組件 -->
<Child @update="emit('update', $event)" />

方法二:使用 v-on=“$attrs”(Vue 3)

<Child v-on="$attrs" />

?? 需要在子組件中加上 inheritAttrs: false(如果不希望自動綁定到根元素)。

🔧 事件修飾符(只適用于 DOM 事件)

事件修飾符如 .stop、.prevent 僅適用于 DOM 事件,不作用于 $emit 的自定義事件。

例如:

<!-- 這是 DOM 事件,不是組件事件 -->
<button @click.stop="doSomething">點我</button>

對于組件事件,比如:

<MyDialog @close="onClose" />

修飾符不會生效。你必須在組件內部自己調用 event.stopPropagation() 來阻止冒泡。

📡 多層組件通信的事件管理

場景:孫組件觸發事件,祖組件監聽。

? 不推薦:跨多層 $emit 傳遞

中間組件每層都要轉發事件,代碼冗余。

? 推薦方式:事件總線 / 狀態管理
? 小項目:使用 mitt 事件總線
? 大項目:用 Pinia / Vuex 等狀態管理工具

// event-bus.js
import mitt from 'mitt'
export const bus = mitt()// 子組件觸發
bus.emit('custom-event', data)// 祖組件監聽
onMounted(() => {bus.on('custom-event', handler)
})

🧩 使用 emits 選項做類型校驗(Vue 3)

defineEmits<{(e: 'submit', formData: Record<string, any>): void(e: 'cancel'): void
}>()

這不僅提供類型提示,也幫助 IDE 檢查事件是否被正確觸發。

🔚 總結:進階重點

功能推薦方式
自定義 v-modelupdate:modelValue
事件透傳$attrs 或中轉 emit
多層通信mitt / 狀態管理
類型提示defineEmits 泛型形式
事件阻止冒泡在組件內部使用原生 stopPropagation()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85031.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85031.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

進程同步機制-信號量機制-記錄型信號量機制中的的wait和signal操作

wait和signal是記錄型信號量機制中用于實現進程同步與互斥的兩個重要操作&#xff0c; wait 操作 wait(semaphores *S) {S->value --;if (S->value<0) block(S->list) }請求資源&#xff1a;S->value --; 這一步表示進程請求一個單位的資源&#xff0c;將信號…

sd webui 安裝sd-webui-TemporalKit 加載報錯解決辦法

ModuleNotFoundError: No module named moviepy.editer 報錯內容類似上面截圖&#xff0c;我的已經解決&#xff0c;暫時無法截圖了 處理方法&#xff1a; 重點說明&#xff1a;插件目錄必須是TemporalKit&#xff0c;不能更改 進入到安裝目錄&#xff1a;extensions\Tempor…

decimal.js庫處理js浮點數精度誤差問題

1、經常遇到前端計算金額的時候出現精度誤差問題&#xff0c;導致前后端計算的金額不一致導致校驗過不去的情況&#xff0c;相信有不少人寫過Math.floor(e*100)/100來實現保留2位小數&#xff0c;但是這么寫就會出現上面的精度問題。怎么解決呢&#xff1f;這里使用的是decimal…

如何將 WSL 的 Ubuntu-24.04 遷移到其他電腦

在使用 Windows Subsystem for Linux (WSL) 時&#xff0c;我們可能會遇到需要將現有的 WSL 環境遷移到其他電腦的情況。無論是為了備份、更換設備&#xff0c;還是在不同電腦之間共享開發環境&#xff0c;掌握遷移 WSL 子系統的方法都是非常有用的。本文將以 Ubuntu-24.04 為例…

RISCV——內核及匯編

RISCV——內核及匯編 小狼http://blog.csdn.net/xiaolangyangyang 1、寄存器組&#xff08;ABI&#xff09; 2、異常及中斷 XV6 trap&#xff08;二&#xff09;RISCV中斷異常處理/定時器中斷 mie&#xff1a;中斷開關mip&#xff1a;中斷狀態mstatus.mie&#xff1a;全局中斷…

算法日記32:埃式篩、gcd和lcm、快速冪、乘法逆元

一、埃式篩&#xff08;計算質數&#xff09; 1.1、概念 1.1.1、在傳統的計算質數中&#xff0c;我們采用單點判斷&#xff0c;即判斷(2~sqrt(n))是否存在不合法元素&#xff0c;若存在則判否&#xff0c;否則判是 1.1.2、假設&#xff0c;此時我們需要求1~1000的所有質數&am…

使用 mysqldump 獲取 MySQL 表的完整創建 DDL

要獲取 MySQL 中某個表的完整創建 DDL&#xff08;僅結構&#xff0c;不含數據&#xff09;&#xff0c;可以使用 mysqldump 工具的以下命令&#xff1a; 基本命令格式 bash mysqldump -h [主機名] -u [用戶名] -p --no-data --single-transaction --routines --triggers --…

Debian 系統 Python 開發全解析:從環境搭建到項目實戰

Debian 系統 Python 開發全解析:從環境搭建到項目實戰 在當今數字化時代,Python 憑借其簡潔易讀的語法和強大的功能,成為了最受歡迎的編程語言之一。Debian 作為一款穩定、安全且開源的 Linux 操作系統,為 Python 開發提供了理想的環境。本文將詳細介紹在 Debian 系統上進…

實時技術對比:SSE vs WebSocket vs Long Polling

早期網站僅展示靜態內容&#xff0c;而如今我們更期望&#xff1a;實時更新、即時聊天、通知推送和動態儀表盤。 那么要如何實現實時的用戶體驗呢&#xff1f;三大經典技術各顯神通&#xff1a; ? SSE&#xff08;Server-Sent Events&#xff09;&#xff1a;輕量級單向數據…

【前端】es6新特性全解

第一章 簡介 1.1 ES6概述 1.1.1 ES6定義與發展歷程 1. ES6 定義 ES6 全稱 ECMAScript 6.0&#xff0c;它是 JavaScript 語言的下一代標準&#xff0c;對 JavaScript 語言進行了許多增強和擴展&#xff0c;帶來了更簡潔、更強大的語法特性。可以把 ES6 想象成是 JavaScript …

nlp中的頻率就是權重嗎

&#x1f522; 一、“頻率”是什么&#xff1f; 在 NLP 中&#xff0c;**詞頻&#xff08;frequency&#xff09;**通常指的是&#xff1a; 某個單詞或 token 在語料庫中出現的次數&#xff08;或比例&#xff09; 舉例&#xff1a; "The cat sat on the mat. The cat i…

多模態大語言模型arxiv論文略讀(九十八)

Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ?? 論文標題&#xff1a;Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ?? 論文作者&#xff1a;Ziyuan Huang, Kaixiang Ji, Biao Gong, Zhiwu Qing, Qinglong Zhang, Kecheng Zhe…

WEB安全--RCE--webshell HIDS bypass4

繼WEB安全--RCE--webshell HIDS bypass3的補充&#xff1a; 十三、時間開關 webshell&#xff1a; <?php ini_set("display_errors",1); function foo($test, $bar FSYSTEM) {echo $test . $bar; } $function new ReflectionFunction(foo); $q new ParseEr…

.NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解

.NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解 目錄 .NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解 一、背景與技術概述 1.1 AOT 編譯技術簡介 1.2 Go 語言與 .NET 的互補性 二、.NET 7 AOT 編譯實踐 2.1 環境準備 2.2 創建 AOT 項目 2.3 AOT 編譯流程 2.4 調試信息處…

機器人--里程計

教程 輪式里程計視頻講解 里程計分類 ros--odometry 什么是里程計 里程計是一種利用從移動傳感器獲得的數據來估計物體位置隨時間的變化而改變的方法。該方法被用在許多機器人系統來估計機器人相對于初始位置移動的距離。 注意&#xff1a;里程計是一套算法&#xff0c;不…

云原生時代 Kafka 深度實踐:02快速上手與環境搭建

2.1 本地開發環境搭建 單機模式安裝 下載與解壓&#xff1a;前往Apache Kafka 官網&#xff0c;下載最新穩定版本的 Kafka 二進制包&#xff08;如kafka_2.13-3.6.0.tgz&#xff0c;其中2.13為 Scala 版本&#xff09;。解壓到本地目錄&#xff0c;例如/opt/kafka&#xff1a…

Vue Hook Store 設計模式最佳實踐指南

Vue Hook Store 設計模式最佳實踐指南 一、引言 在 Vue 3 組合式 API 與 TypeScript 普及的背景下&#xff0c;Hook Store 設計模式應運而生&#xff0c;它結合了 Vue 組合式 API 的靈活性與狀態管理的最佳實踐&#xff0c;為開發者提供了一種輕量級、可測試且易于維護的狀態…

無人機多人協同控制技術解析

一、運行方式 無人機多人點對點控制通常采用以下兩種模式&#xff1a; 1. 主從控制模式 指定一個主控用戶擁有最高優先級&#xff0c;負責飛行路徑規劃、緊急操作等關鍵指令&#xff1b;其他用戶作為觀察者&#xff0c;僅能查看實時畫面或提交輔助指令&#xff0c;需經主…

樹型表查詢方法 —— SQL遞歸

目錄 引言&#xff1a; 自鏈接查詢&#xff1a; 遞歸查詢&#xff1a; 編寫service接口實現&#xff1a; 引言&#xff1a; 看下圖&#xff0c;這是 course_category 課程分類表的結構&#xff1a; 這張表是一個樹型結構&#xff0c;通過父結點id將各元素組成一個樹。 我…

微服務難題?Nacos服務發現來救場

文章目錄 前言1.什么是服務發現2.Nacos 閃亮登場2.1 服務注冊2.2 服務發現 3.Nacos 的優勢3.1 簡單易用3.2 高可用3.3 動態配置 4.實戰演練4.1安裝 Nacos4.2 服務注冊與發現示例代碼&#xff08;以 Spring Boot 為例&#xff09; 總結 前言 大家好&#xff0c;我是沛哥兒。今天…