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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;我是沛哥儿。今天…