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

vue3组件之间通讯

1.  props,实现父组件向子组件通讯。

父组件 :对子组件属性绑定要通讯的数据。

子组件:通过defineProps来进行数据接收。

2.  emit,实现子组件向父组件通讯。

子组件:通过emit创建向父组件传递数据事件

父组件:通过自定义事件接收子组件传递数据。

3.mitt,实现任意组件之间通讯。

准备工作:安装mitt依赖包(npm i mitt),创建emitter.ts文件。

组件A(发送数据):通过emitter.emit绑定事件。

组件B(接收数据):通过emitter.on接收事件,取出数据。并在组件销毁时通过 emitter.off解绑事件。

4.v-mode,通过v-model实现原完成组件通讯(不推荐用,了解v-model实现流程)

v-model实现原理实际是通过属性绑定(父传子)和事件绑定(子传父)

html原始元素(input等)和 vue2中 v-model底层 属性名为:value 事件名为 @input

vue3中 v-mode 底层属性名为:modelValue 事件名为@update:modelValue ,update:modelValue中的属性名没有任何意义就是字符串

封装组件

5.attrs,通过attrs实现祖孙通讯(不推荐用,了解$attrs)

当父组件向子组件传递数据,在子组件中并未声明使用则数据会暂存到组件$attrs中,此时子组件可以通过v-bind="$attrs",将这些暂存数据传递给孙组件中。

父组件

子组件

孙组件

5.$ref和$parents,父组件通过$ref获取子组件实例,子组件通过$parents获取父组件实例。

组件通过defineExpose对外暴露要传递的数据,

父组件

<template><div>04$refs{{ msg }}<p>{{ x }}</p><button @click="chang1">查看子组件1数据</button><button @click="chang2" style="margin-left: 10px;">查看子组件2数据</button><button @click="chang3($refs)" style="margin-left: 10px;">获取所有子组件数据</button><son1 ref="son1Ref"></son1><son2 ref="son2Ref"></son2></div>
</template><script setup>
import  son1 from './06$refs-$parents/son1.vue'
import  son2 from './06$refs-$parents/son2.vue'
import {ref} from 'vue'
let msg = ref('3')
let x = 10
let son1Ref = ref()
let son2Ref = ref()
function chang1(){//子组件需要暴露出具才能获取到console.log("我是父组件获取子组件数据和事件");console.log(son1Ref.value)console.log(son1Ref.value.a);console.log(son1Ref.value.b);son1Ref.value.changeData()
}
function chang2(){//子组件需要暴露出具才能获取到console.log(son2Ref.value)
}
function chang3(e){//获取所有子组件实例对象console.log(e);
}
defineExpose({msg,x})</script>

子组件

6.provide和inject,父组件可以向后代任意组件进行通讯。

父组件通过provide传递数据,后代组件通过inject接收数据

父组件

子组件

7.slot,使用插槽进行父子组件通讯。

插槽分为:默认插槽,具名插槽,作用域插槽(父组件插槽内容使用子组件数据)

默认插槽

父组件

<div><son><h3>默认插槽</h3>           </son>
</div>

子组件

<div><p>下面是默认插槽内容</p><slot></slot>         
</div>

具名插槽

父组件

<div><son><template v-slot:s2><h3>具名插槽</h3></template>        </son>
</div>

子组件

<div><p>下面是具名插槽内容</p><slot name="s2"></slot>        
</div>

作用域插槽

父组件

 <son><template v-slot="cars"><h2>我是作用域插槽</h2><div v-for="item in cars.carList" :key="item.name">{{ item.name }}                                </div></template></son>

子组件

<div><slot :carList="carList"></slot>
</div>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 华为OD-D卷游戏分组
  • keepalived+lvs高可用负载均衡集群配置方案
  • MATLAB算法实战应用案例精讲-【数模应用】均值z 检验(附R语言、python和MATLAB代码实现)
  • Otter Go 语言编写的非竞争式缓存库
  • 8月5日学习笔记 glibc安装与安全用户角色权限
  • Postgresql数据库密码忘记的解决
  • 操作系统中的进程:深入解析与理解
  • Qt+TSC打印机调试
  • springboot疫情居家办公系统--论文源码调试讲解
  • AI驱动的招聘流程革新与挑战应对
  • HAProxy七层负载均衡配置方案
  • Linux的platform设备驱动框架
  • python中的迭代器、可迭代对象和生成器
  • 时序预测|基于变分模态分解-时域卷积-双向长短期记忆-注意力机制多变量时间序列预测VMD-TCN-BiLSTM-Attention
  • 【Linux】网络编程套接字Scoket:UDP网络编程
  • CAP理论的例子讲解
  • HTTP中GET与POST的区别 99%的错误认识
  • LintCode 31. partitionArray 数组划分
  • php中curl和soap方式请求服务超时问题
  • python大佬养成计划----difflib模块
  • Redis 懒删除(lazy free)简史
  • SpingCloudBus整合RabbitMQ
  • 初识 beanstalkd
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端路由实现-history
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • NLPIR智能语义技术让大数据挖掘更简单
  • Prometheus VS InfluxDB
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #define 用法
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (0)Nginx 功能特性
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (新)网络工程师考点串讲与真题详解
  • (转)JAVA中的堆栈
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Core引入性能分析引导优化
  • .NET Remoting学习笔记(三)信道
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中的轻量级线程安全
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET关于 跳过SSL中遇到的问题