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

Vue3自定义事件

   自定义事件是一种组件间通信的方式,它允许子组件向父组件发送信息。

子组件可以通过自定义事件向父组件传递数据以及事件,当自定义事件触发时,子组件可以借此将子组件的数据传递给父组件并使父组件对此做出相应的操作。

1.声明自定义事件

使用defineEmits()宏声明组件要发生的事件(事件名自己取),defineEmits() 的返回值是一个 ref
下面的代码为组件声明了事件 myEvent

const emit = defineEmits(['myEvent'])
2.触发与监听事件
2.1 事件触发

自定义事件可以在 template 部分中使用 $emit和在 setup 部分中使用 defineEmits() 的返回值触发。
下面例子使用按钮点击事件触发自定义事件。
template中触发:

<template><button @click="$emit('myEvent')">点我</button>
</template>

setup中触发:

<template><button @click="handleClick">点我</button>
</template><script setup>const emit = defineEmits(['myEvent'])const handleClick = () => {emit('myEvent')
}</script>
2.2 事件监听

父组件在使用子组件时,在子组件上监听自定义事件并采取相关操作。

<template><Child@my-event="handleMyEvent"></Child>
</template><script setup>
import Child from '@/components/TestChild/index.vue'const handleMyEvent = () => {console.log('555')
}</script><style lang='scss' scoped></style>
3.事件参数

有时候,我们需要在事件触发时传递特定的值。这时可以给 $emit 提供而外的参数。
下面代码中,当事件触发时,子组件向父组件传递一个参数:

<template><button @click="$emit('myEvent',10)">点我</button>
</template><script setup>const emit = defineEmits(['myEvent'])</script><style lang='scss' scoped></style>

父组件可以使用一个内联的箭头函数或组件函数方法监听事件,两种方式都可以接收到参数。
箭头函数:

<template><p>{{ num }}</p><Child@my-event="(n) => num += n"></Child>
</template><script setup>
import { ref } from 'vue';
import Child from '@/components/TestChild/index.vue'const num = ref(0)</script><style lang='scss' scoped></style>

组件函数:

<template><p>{{ num }}</p><Child@my-event="handleMyEvent"></Child>
</template><script setup>
import { ref } from 'vue';
import Child from '@/components/TestChild/index.vue'const num = ref(0)const handleMyEvent = (n) => {num.value += n
}</script><style lang='scss' scoped></style>
http://www.lryc.cn/news/507366.html

相关文章:

  • BeautifulSoup 与 XPath 用法详解与对比
  • Emacs 折腾日记(五)——elisp 数字类型
  • 重拾设计模式--外观模式
  • 源码编译llama.cpp for android
  • StarRocks 排查单副本表
  • Windows11 家庭版安装配置 Docker
  • 线程知识总结(二)
  • 解决vscode ssh远程连接服务器一直卡在下载 vscode server问题
  • 【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)
  • Definition of Done
  • 【漏洞复现】CVE-2023-37461 Arbitrary File Writing
  • 简单工厂模式和策略模式的异同
  • HuggingFace datasets - 下载数据
  • 梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语
  • Vscode搭建C语言多文件开发环境
  • 自定义 C++ 编译器的调用与管理
  • 时间管理系统|Java|SSM|JSP|
  • 用SparkSQL和PySpark完成按时间字段顺序将字符串字段中的值组合在一起分组显示
  • Sentinel 学习笔记3-责任链与工作流程
  • Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
  • 使用Chat-LangChain模块创建一个与用户交流的机器人
  • 国家认可的人工智能从业人员证书如何报考?
  • 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析
  • 每日十题八股-2024年12月19日
  • 网络方案设计
  • 学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】
  • 【Java数据结构】ArrayList类
  • HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化
  • 71 mysql 中 insert into ... on duplicate key update ... 的实现
  • 计算机网络-GRE Over IPSec实验