图解Vue组件通讯【一图胜千言】

Vue的每个组件都有独自的作用域,组件间的数据是无法共享的,但实际开发工作中我们常常需要让组件之间共享数据,今天我们来学习下面三种组件通信方式:

父子组件之间的通信
兄弟组件之间的通信
祖先与后代组件之间的通信

1. 父子组件之间的通信

适用场景:父组件传递数据给子组件

步骤1:父组件在使用子组件标签时通过字面量来传递值
步骤2:子组件设置props属性,定义接收父组件传递过来的参数

// 父组件
<Children name="jack" :age="18" /> 
// 子组件
props:{  // 字符串形式  name:String,  // 接收的类型参数  // 对象形式  age:{    type:Number,  // 接收的类型为数值defaule:18,   // 默认值为18require:true  // 必须传递}  
}

适用场景:子组件传递数据给父组件

步骤1:子组件通过$emit触发自定义事件,$emit第二个参数为传递的值
步骤2:父组件绑定监听器获取到子组件传递过来的参数

// 子组件
this.$emit('transferValue', 144)
// 父组件
<Children @transferValue="transferValue($event)" />

适用场景:父组件里直接调用子组件的属性和方法

步骤1:给子组件添加 ref 属性,名字随意
步骤2:通过 this.$refs.xxx 获取组件对象,此时可以调用子组件的属性和方法

<Children ref="foo" />  this.$refs.foo  // 获取子组件实例,通过子组件实例我们就能拿到对应的数据  

2. 兄弟组件之间的通信

适用场景:兄弟组件传值,通过Eventbus

步骤1:Vue原型上挂载$bus
步骤2:某一个兄弟组件通过$emit触发自定义事件,$emit第二个参数为传递的值
步骤3:另一个兄弟组件通过$on监听自定义事件,$on第二个参数为事件处理函数,该函数内可以获取值

// 入口文件 或 main.js
Vue.prototype.$bus = new Vue()
// 父组件
<brother-com />
<sibling-com />
// 子组件 BrotherCom
<script>
export default {name: 'BrotherCom',created () {// this.$bus.$emit 写这不生效!!!},mounted () {this.$bus.$emit('transfer', 144)}
}
</script>
// 子组件 SiblingCom
<script>
export default {name: 'SiblingCom',created () {  // $on可以写在created里this.$bus.$on('transfer', (data) => {console.log(data)  // 输出 144})}
}
</script>

适用场景:兄弟组件传值,通过共同祖辈$parent
// 兄弟组件
this.$parent.on('transfer', 144)// 另一个兄弟组件
this.$parent.emit('transfer', (data) => {console.log(data)  // 输出 144
})

3. 祖先与后代组件之间的通信

$attrs 和 $listeners介绍

$attrs:包含了父作用域中没有被 prop 接收的所有属性(不包含class 和 style 属性)。可以通过 v-bind="$attrs" 直接将这些属性传入内部组件。

$listeners:包含所有父组件中的 v-on 事件监听器 (不包含 .native 修饰器的) ,可以通过 v-on="$listeners" 传入内部组件。

父组件隔代传值给孙组件

步骤1:父组件在使用子组件标签时通过字面量来传递值
步骤2:子组件在使用孙组件标签时使用 v-bind="$attrs" 转发值
步骤3:孙组件设置props属性,定义接收父组件传递过来的值

// 父组件在使用子组件标签时通过字面量来传递值
<Child name="jack" :age="144" />
// 子组件在使用孙组件标签时使用v-bind="$attrs"转发值
<GrandChild v-bind="$attrs" />
// 孙组件
<script>
export default {name: 'GrandChild',props:{  // 字符串形式  name:String,  // 接收的类型参数  // 对象形式  age:{    type:Number,  // 接收的类型为数值defaule:18,   // 默认值为18require:true  // 必须传递}  }
}
</script>

孙组件隔代传值给父组件

步骤1:孙组件通过$emit触发自定义事件,$emit第二个参数为传递的值
步骤2:子组件在使用孙组件标签时使用 v-on="$listeners" 转发自定义事件
步骤3:父组件绑定监听器获取到孙组件传递过来的参数

// 孙组件
<script>
export default {name: 'GrandChild',created () {this.$emit('transfer', 144)}
}
</script>
// 子组件在使用孙组件标签时使用v-on="$listeners转发事件
<GrandChild v-on="$listeners" />
// 父组件
<template><div><Child @transfer="handleTransfer"/></div>
</template><script>
import Child from '@/components/Child.vue'
export default {name: 'App',components: {Child},methods: {handleTransfer (val) {console.log(val)  // 输出 144}}}
</script>

End-----------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448950.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年混合云:趋势和预测

混合云环境对于 DevOps 团队变得越来越重要&#xff0c;主要是因为它们能够弥合公共云资源的快速部署与私有云基础设施的安全和控制之间的差距。这种环境的混合为 DevOps 团队提供了灵活性和可扩展性&#xff0c;这对于大型企业中的持续集成和持续部署 (CI/CD) 至关重要。 在混…

PPT母版页码设置

PPT母版页码设置 一、需求介绍二、达到效果三、具体操作1. 插入页码2. 设置起始页码为03. 进入母版编辑页面4. 内容格式调整5. 删去最后一个板式的三个模块信息6. 尾页处理7. 最终效果 一、需求介绍 PPT的母版可以设定PPT的基调&#xff0c;且在非母版页面不会误改PPT中的固定…

【数据结构与算法】之排序系列-20240202

这里写目录标题 一、389. 找不同二、414. 第三大的数三、455. 分发饼干四、506. 相对名次五、561. 数组拆分六、594. 最长和谐子序列 一、389. 找不同 简单 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添…

如何使用wireshark解析二进制文件

目录 目录 1.将已有的packet raw data按照下面格式写入文本文件中 a. Raw IP packet b. Ethernet packet 2.用wiershark导入hex文件 3.设置对应的packet类型 a. Raw IP packet b. Ethernet packet 1.将已有的packet raw data按照下面格式写入文本文件中 a. Raw IP pac…

C#代码添加脚本头

目录 前言 代码展示 前言 创建脚本的时候添加脚本的介绍 代码展示 using System.IO;/// <summary> /// 创建脚本自动添加头注 /// </summary> public class CommentFirst : UnityEditor.AssetModificationProcessor {/// <summary>/// 在资源创建生成.me…

STM32CAN2进入bus off 模式

工作遇到的问题记录 无人机CAN2整个进不了中断&#xff0c;通过查看寄存器判定出CAN节点进入了bus off mode 为何进入bus off &#xff0c;最后通过示波器看到整个CAN2总线波形就不对&#xff0c;总线出现了错误 Busoff的产生是一定是因为节点自身识别到自己发送错误&#xff…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能&#xff0c;这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前&#xff08;约2021年末&#xff09;貌似可以通过WordPress自带的函数发信&#xff0c;并且收信方提示由xxx代…

某站平台的签名算法分享

先charles抓包&#xff0c;api.xxxxxx.com域名的包 分析包 看到路径参数如下 appkey1d8b6e7d45233436&build5531000&channeldw056&mobi_appandroid&mode0&oid326052200&plat2&platformandroid&ps20&statistics%7B%22appId%22%3A1%2C%22p…

Unity Meta Quest MR 开发(三):Scene API 配置+实现虚拟与现实之间的碰撞

文章目录 &#x1f4d5;教程说明&#x1f4d5; Scene 配置⭐开启场景理解功能和应用访问空间数据的权限⭐OVRSceneManager⭐制作 Plane Prefab 和 Volume Prefab⭐运行场景⭐添加透视材质 &#x1f4d5;虚拟与现实物体的碰撞&#xff08;弹球 Demo&#xff09;&#x1f4d5;Mes…

TCP/IP协议以及TCP/IP邮件详细介绍

目录 1. TCP/IP 协议 2. 协议族 3. TCP - 传输控制协议 4. IP - 网际协议&#xff08;Internet Protocol&#xff09; 5. HTTP - 超文本传输协议(Hyper Text Transfer Protocol) 6. HTTPS - 安全的 HTTP&#xff08;HTTP Secure&#xff09; 7. SSL - 安全套接字…

LISN究竟是什么?有什么作用?

在电子领域中&#xff0c;LISN是一个充满神秘感的工具&#xff0c;常常被用于电磁兼容性测试。本文将深入探讨LISN的本质是什么&#xff0c;以及它在电子领域中扮演的关键角色。 1. 认识LISN LISN&#xff0c;全称为Line Impedance Stabilization Network&#xff0c;即线路阻…

CTF特训(二):青少年CTF-MISC部分WP

FLAG&#xff1a;当觉得自己很菜的时候&#xff0c;就静下心来学习 专研方向:MISC&#xff0c;CTF 每日emo&#xff1a;听一千遍反方向的钟&#xff0c;我们能回到过去吗&#xff1f; CTF特训(二)&#xff1a;青少年CTF-MISC部分WP&#xff1a; 文章目录 CTF特训(二)&#xff1…