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

Vue3实战笔记(47)— 一探emit奥秘——组件间通信的艺术与实践

文章目录

  • 前言
  • 一、Vue 2 中的emti
  • 二、Vue 3的emit
  • 总结


前言

Vue封装了自定义组件之后,如果子组件想要向父组件传递数据该怎么办?

Vue.js 中的 emit 方法就是主要用于组件间的通信,特别是父组件与子组件之间的通信机制。它是 Vue 组件内部触发自定义事件并向父级组件传递数据的一种方式。


一、Vue 2 中的emti

在 Vue 组件中,当你想要向父组件传递信息或通知父组件某个状态发生了改变时,可以使用 $emit。通常情况下,子组件无法直接修改父组件的数据,而是通过定义并触发一个自定义事件,由父组件监听并在回调函数中作出响应。

但是要注意,Vue2和Vue3的用法略有不同。
Vue 2 示例:

<!-- 父组件(parent-component.vue) -->
<template><div><child-component @child-event="handleChildEvent" /></div>
</template><script>
import ChildComponent from './child-component.vue';export default {components: { ChildComponent },methods: {handleChildEvent(data) {console.log('接收到的数据:', data);}}
}
</script>
<!-- 子组件(child-component.vue) -->
<template><div><button @click="sendData">发送数据</button></div>
</template><script>
export default {methods: {sendData() {this.$emit('child-event', '这是发送的数据');}}
}
</script>

在这个例子中,子组件 child-component.vue 使用 $emit 方法触发了一个名为 child-event 的自定义事件,并传入了一个参数 data。父组件 parent-component.vue 通过监听 child-event 事件并定义一个处理函数 handleChildEvent 来接收数据。当子组件中的按钮被点击时,会触发 child-event 事件,父组件会接收到数据并在控制台中打印出来。

二、Vue 3的emit

Vue 3 示例:


<!-- 父组件(parent-component.vue) -->
<template><div><child-component ref="childRef" /></div>
</template><script>
import ChildComponent from './child-component.vue';export default {components: { ChildComponent },setup() {const childRef = ref(null);function handleChildEvent(data) {console.log('接收到的数据:', data);}onMounted(() => {childRef.value.$on('child-event', handleChildEvent);});onUnmounted(() => {childRef.value.$off('child-event', handleChildEvent);});return { childRef };}
}
</script><!-- 子组件(child-component.vue) -->
<template><div><button @click="sendData">发送数据</button></div>
</template><script>
export default {methods: {sendData() {this.$emit('child-event', '这是发送的数据');}}
}
</script>

在这个例子中,父组件 parent-component.vue 使用 ref 属性创建了一个引用,并将其分配给子组件。在 setup 函数中,定义了一个处理函数 handleChildEvent 用于处理自定义事件。在 onMounted 钩子中,使用子组件引用的 $on 方法监听 child-event 事件。在 onUnmounted 钩子中,使用子组件引用的 $off 方法取消对 child-event 事件的监听。当子组件中的按钮被点击时,会触发 child-event 事件,父组件会接收到数据并在控制台中打印出来。


总结

做一个积极向上的人,给自己和他人带来阳光。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • React 微信扫码登陆网页
  • iOS推送证书过期处理
  • Java:String、StringBuffer和StringBuilder的区别
  • linux安装python第三方库情况
  • 防火墙基础基础篇:NAT转发功能之——Easy IP方式详解
  • dcache-android框架中的设计模式详解
  • 深圳比创达EMC|EMI电磁干扰行业:行业发展的关键与挑战
  • 汇编原理(二)寄存器——内存访问
  • 掌握SQL注入检测:深入理解SQLMAP工具
  • 成长之路Flutter中的TextField组件
  • 数据中台建设方案(Word版源文档)
  • CentOS8搭载正反向解析dns服务器
  • 2020职称继续教育--突发公共卫生事件应急处理技术方案
  • PHP框架 Laravel
  • 「小明赠书活动」第四期《Java开发坑点解析:从根因分析到最佳实践》
  • Google 是如何开发 Web 框架的
  • 【5+】跨webview多页面 触发事件(二)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • ➹使用webpack配置多页面应用(MPA)
  • canvas绘制圆角头像
  • Cookie 在前端中的实践
  • ES6之路之模块详解
  • exif信息对照
  • Fastjson的基本使用方法大全
  • in typeof instanceof ===这些运算符有什么作用
  • laravel 用artisan创建自己的模板
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Python爬虫--- 1.3 BS4库的解析器
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring boot 整合mybatis 无法输出sql的问题
  • vue-cli3搭建项目
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关于for循环的简单归纳
  • 关于List、List?、ListObject的区别
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 检测对象或数组
  • 经典排序算法及其 Java 实现
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转载)从 Java 代码到 Java 堆
  • *Django中的Ajax 纯js的书写样式1
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .equals()到底是什么意思?
  • .NET C# 配置 Options