图解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.mzph.cn/news/664271.shtml

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

相关文章

Qt|制作简单的不规则窗体

通常我们用到的对话框基本上都是规则的&#xff0c;在有些特殊情况下&#xff0c;也会使用到不规则窗口&#xff0c;那么该如何实现不规则窗体呢&#xff1f; 在MFC框架下很难实现&#xff0c;应该说是难的都想放弃&#xff0c;但是&#xff0c;Qt框架下提供了一个叫做setMask…

产品经理学习-产品运营《海报制作》

如何策划一款优秀的海报 海报是什么&#xff1f; 是一种将文字和图片结合的信息传递形式&#xff1b;其作用和目的是把想传递给用户的信息高效的传递出去&#xff0c;让用户在极短的时间内产生兴趣&#xff0c;进而产生收藏、分享等行为。 海报的类型&#xff1a; 类型 特点 …

算法:阿里巴巴找黄金宝箱(II)

一、算法描述 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的箱子&#xff0c; 每个箱子上面贴有箱子中藏有金币Q的数量。 从金币数量中选出一个数字集合&#xff0c; 并销毁贴有这些数字的每个箱子&…

BL808 Linux支持WIFI

BL808芯片介绍 BL808是高度集成的AIoT芯片组&#xff0c;具有Wi-Fi/BT/BLE/Zigbee等无线互联单元&#xff0c;包含多个 CPU 以及音频编码译码器、视频编码译码器和 AI 硬件加速器&#xff0c;适用于各种高性能和低功耗应用领域。 外围接口包括 USB2.0、 Ethernet、 SD/MMC、 …

Qt简易的五子棋

五子棋是个简单的小游戏&#xff0c;尝试使用Qt将他做出来&#xff0c;学习时的练习demo。 成果展示 需求分析 五子棋&#xff1a;在棋盘上&#xff0c;黑棋先行&#xff0c;交替下棋&#xff0c;五子练成直线获取胜利。 实现过程 1.棋盘绘制&#xff1a;下棋的第一步肯定是绘制…

JAVA单例模式详解

单例模式 创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性 常用的有&#xff1a;单例模式、工厂模式&#xff08;工厂方法和抽象工厂&#xff09;、建造者模式。 不常用的有&#xff1a;原型模式。 1 单例模式介绍 1 ) 定义 单例模式&#xff08;Singlet…

Windows内存管理 - 物理内存概念(Physical Memory Address)

作为windows驱动程序的程序员&#xff0c;需要比普通程序员更多的了解Windows内部的内存管理机制&#xff0c;并在驱动程序中有效地使用内存。在驱动程序编写中&#xff0c;分配和管理内存不能使用熟知的Win32 API函数&#xff0c;取而代之的是DDK提供的高效的内核函数。程序员…

platform总线

1、平台总线模型 平台总线模型是Linux系统虚拟出来的总线&#xff0c;而I2C、SPI等物理总线是真实存在的。 平台总线模型将一个驱动分成两个部分&#xff0c;分别是device.c和driver.c&#xff0c;分别用来描述硬件信息和控制硬件。 平台总线通过字符串比较&#xff0c;将name…

力扣热门100题刷题笔记 - 1.两数之和

力扣热门100题 - 1.两数之和 题目链接&#xff1a;1.两数之和 题目描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答…

Linux网络状态查看与防火墙管理

网络状态查看 netstat [选项] Netstat是一款命令行工具&#xff0c;用于显示Linux系统中网络的状态信息&#xff0c;可以显示网络连接、路由表、连接的数据统计等信息。 使用 选项 -a&#xff1a;显示所有选项&#xff0c;包括监听和未监听的端口。 -t&#xff1a;仅显示tc…

LLM(4) | Attention Is All You Need 论文粗读

LLM(4) | Attention Is All You Need 论文粗读 文章目录 LLM(4) | Attention Is All You Need 论文粗读1. 目的2. 回顾论文精读的第一遍的步骤3. 标题4. 摘要3. 结论4. 稍微看一下实验的图表5. 稍微看一下方法里的图表Reference 1. 目的 LLM 模型都是 transformer 模型&#x…

MUTAN readme文件(翻译)

/!\ VQA的新版本PyTorch代码现已提供&#xff0c;链接在这里: 代码链接 这个仓库是由Remi Cadene&#xff08;LIP6&#xff09;和Hedi Ben-Younes&#xff08;LIP6-Heuritech&#xff09;创建的&#xff0c;他们是在UPMC-LIP6从事VQA研究的两名博士生&#xff0c;以及他们的导…

【python】英语单词文本处理

文章目录 前言一、环境实验所需的库终端指令 二、实现过程Version 1 起源Version 2 listVersion 3 arrayVersion 4 结构化数组Version 5 区分单元且打乱顺序Version 6 可视化 三、txt文件 前言 缘起自懒得考小孩儿单词&#xff0c;最终效果如图&#xff1a; 本文记录了英语单词…

关于环境配置没问题,pnpm能安装却无法使用的问题

pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 pnpm i ~~~~ CategoryInfo : ObjectNotFound: (pn…

flutter开发实战-Camera自定义相机拍照功能实现

flutter开发实战-Camera自定义相机拍照功能实现 一、前言 在项目中使用image_picker插件时候&#xff0c;在android设备上使用无法默认设置前置摄像头&#xff08;暂时不清楚什么原因&#xff09;&#xff0c;由于项目默认需要使用前置摄像头&#xff0c;所以最终采用自定义…

面试经典150题 -- 区间(总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台最经典 150 题&#xff0c;掌握面试所有知识点https://leetcode.cn/studyplan/top-interview-150/ 228 汇总区间 直接用双指针模拟即可 ; class Solution { public…

Linux 指令

Linux 指令 1 登入/登出1.1 关机1.2 重启1.3 切用户 2 文件和目录管理2.1 目录操作2.2 文件操作2.3 文件内容操作2.4 归档及压缩 3 文本编辑器 vim3.1 命令模式3.2 输入模式3.3 末行模式 4 用户和组管理4.1 用户和组帐号概述4.1.1 用户帐号4.1.2 UID和GID 4.2 用户管理 5 组管理…

拥抱个人成长与社会进步:自我认知与开放心态的相互影响

拥抱个人成长与社会进步&#xff1a;自我认知与开放心态的相互影响 Embracing Personal Growth and Societal Progress: The Interplay of Self-Awareness and Open-mindedness 一、引言 I. Introduction 在当今急速发展的时代&#xff0c;个人成长与社会进步交织在一起&…

[每周一更]-(第86期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要&#xff1a; 应用&#xff1a; 利用NLP技术从医疗文档中自动生成病历摘要&#xff0c;以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类&#xff1a; 应用&#xff1a; 使用文本分类技术自动分类法律文件&#xf…

后端软件三层架构

一、三层架构简介 三层架构是软件开发中广泛采用的一种经典架构模式&#xff0c;其核心价值在于通过清晰的任务划分来提高代码的可维护性和重用性。具体来说&#xff0c;三层架构主要包括以下三个层次&#xff1a; 持久层&#xff08;DAO层&#xff09;&#xff1a;这一层主要…