当前位置: 首页 > news >正文

$emit自定义组件发数据本组件

本组件

<template> <view> <zj-a @add='ona'></zj-a> </view> </template> <script setup> const ona=function(e){ console.log(e); } </script> <style lang="scss" > </style>

自定义组件

<template> <view> <button @click="$emit('add',Math.random())"> 按钮 </button> </view> </template> <script setup> </script> <style lang="scss" scoped> </style>

----------------------$emit自定义组件发数据本组件---------------------

$emit 的基本用法

在 Vue 3 中,$emit用于子组件向父组件传递事件。子组件通过触发事件,父组件监听这些事件并执行相应的逻辑。

子组件中触发事件:

this.$emit('event-name', payload);

父组件中监听事件:

<child-component @event-name="handleEvent" />

使用defineEmits声明事件

Vue 3 的<script setup>语法中,推荐使用defineEmits来声明组件可以触发的事件,增强代码的可读性和类型安全。

<script setup> const emit = defineEmits(['event-name']); function triggerEvent() { emit('event-name', payload); } </script>

类型安全的defineEmits

在 TypeScript 中,可以通过泛型为defineEmits提供更严格的类型检查:

<script setup lang="ts"> const emit = defineEmits<{ (e: 'event-name', payload: PayloadType): void; }>(); function triggerEvent() { emit('event-name', payload); } </script>

事件校验

defineEmits还支持对事件参数进行校验,确保触发事件时传递的数据符合预期:

<script setup> const emit = defineEmits({ 'event-name': (payload) => { return typeof payload === 'string' && payload.length > 0; } }); function triggerEvent() { emit('event-name', 'valid payload'); } </script>

动态事件名

可以通过变量动态生成事件名,但需确保事件名在模板中是静态的:

const eventName = 'dynamic-event'; emit(eventName, payload);

v-model结合使用

$emit常用于实现自定义组件的v-model。在 Vue 3 中,v-model默认对应modelValueprop 和update:modelValue事件:

子组件:

<script setup> const emit = defineEmits(['update:modelValue']); function updateValue(value) { emit('update:modelValue', value); } </script>

父组件:

<custom-component v-model="value" />

多个v-model绑定

Vue 3 支持多个v-model绑定,每个绑定对应不同的事件名:

子组件:

<script setup> const emit = defineEmits(['update:modelValue', 'update:anotherValue']); function updateValues() { emit('update:modelValue', newValue); emit('update:anotherValue', anotherNewValue); } </script>

父组件:

<custom-component v-model="value" v-model:anotherValue="anotherValue" />
http://www.jsqmd.com/news/449462/

相关文章:

  • 选一种颜色,出门走走
  • DRAM内存访问协议核心解析:全场景命令时序约束汇总表(内存控制器设计核心参考)
  • 英飞凌 IRS2381C Real3™ 飞行时间(ToF)图像传感器
  • 正面交锋:Gemini 3.1 Pro与GPT-5.4的技术分野与选择逻辑
  • 从加载状态看提示界面设计:提升等待体验
  • 计算机毕业设计java基于Java的自动化网站设计与实现 基于B/S架构的教学自动化管理平台设计与实现 面向师生互动的作业提交与课程测评系统开发
  • 程序化树木生成器(ThreeJS EZ-Tree 开源项目)
  • 同样画CAD,别人2小时搞定,你却卡半天?问题出在这3处
  • 全国可实时在线监控的压力变送器品牌有哪些推荐 - 工业品网
  • +混合高斯模型聚类 #机器学习+#人工智能+#特征提取+#特征融合+#特征降维+#聚类+#分类器+#无监督学习
  • 【数据集】地级市城市创业活跃度数据(2000-2024年)
  • 攻读博士学位期间研究计划书(格式模板与实例示范)——基于超快卷积光学神经网络的无记忆散射成像方法研究
  • 2026聊聊绵阳圆管立柱加工厂技术强的品牌推荐 - 工业设备
  • 腾讯QQ开放OpenClaw机器人创建通道,单个账号最多可创建5个
  • 2026年内江口碑好的动漫培训品牌机构,专业动漫培训怎么收费 - 工业品牌热点
  • PAT 乙级 1081
  • 塞那耳夹式耳机:通勤女孩的秘密武器,这副耳机真的太省心了
  • 流量怎么用——生成论视角下的注意力分配
  • 三维ToF技术:重构机器视觉维度的里程碑与工业应用前瞻
  • anaconda pycharm
  • 2026年水泥隔离墩厂家哪家好,章丘区昇顺交通设施厂实力上榜 - mypinpai
  • 京东年报解读:当AI遇上超级供应链,京东下了场大棋
  • 记录一次排查本机连接linux虚拟机mysql报错经过
  • 将盾CDN:HTTPS加密传输与证书管理
  • 使用burp实现对mumu模拟器上手机应用的抓包
  • rtthread学习路线
  • 东莞“厂区爱情故事”数据分析:两个打工人的十年,如何完成从“单例模式”到“分布式系统”的架构升级
  • 探讨电磁流量计品牌厂家选购要点,全国哪家更值得选? - 工业品网
  • 使用 VMware 虚拟机重置密码的方法
  • 用 AI 给运维告警降噪:从理想到现实