Vue组件之间的数据共享详解

news/2024/4/29 14:28:18/文章来源:https://blog.csdn.net/zxdznyy/article/details/127242654

目录

  • 前言
  • 一,props的作用
  • 二,父向子传值
    • 2.1 子元素
    • 2.2 父元素
    • 2.3 整体代码
  • 三,子向父传值
    • 3.1 子组件
    • 3.2 父组件
    • 3.3 整体代码
  • 四,兄弟之间的数据传递
    • 4.1 事件总线EventBus介绍(面试高频)
    • 4.2 传值方
    • 4.3 接收方
  • 后记

前言

组件之间的关系有父子关系与兄弟关系,在项目中,经常会遇到组件之间数据共享的问题。本篇博客针对此问题进行讲解,希望能对读者有帮助!

一,props的作用

定义:props是组件的自定义属性。在封装通用组件时,合理使用props可以极大提高组件的复用性。

语法格式:和data()平级,声明props["自定义属性A”,“自定义属性B”]

作用:组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。父组件的数据需要通过 prop 才能下发到子组件中。(官方文档)

理解:props是子组件访问父组件数据的唯一接口。所以,props是用于子组件的。

特点:只读不写。

关于props大家可以移步关于Vue中props的详解
这是别的博主写的文章,写的非常好,大家想要了解可以看一下。

二,父向子传值

父向子传值的方法是:自定义属性,父组件中提供数据,子组件接收数据

2.1 子元素

首先,我们先在子元素中加入结构,给一个容器来装父亲传来的值:
在这里插入图片描述
刚刚在上文也介绍过,子元素中一定要有props,props是子接收父的唯一接口,一般情况下格式是:
在这里插入图片描述
default代表的是初始值,而type则代表的是父亲传过来的数据类型,如果数据类型不对则报错。
当然,如果不需要判断也可以直接写成(一般用于定值):
在这里插入图片描述

2.2 父元素

首先,父组件是需要引入子组件的(父子关系的由来)
其次,父组件需要在data中定义要传的数据:
在这里插入图片描述
接着,则是需要在调用子组件时使用v-bind单向传递数据
在这里插入图片描述

2.3 整体代码

父组件:

<template><div class="App-container"><Son :msg="messeage" :user="user"></Son></div>
</template><script>
import Son from './components/Son.vue'
export default {data() {return {messeage: '我是msg',user: '我是巧克力小猫猿'}},components: {Son}
}
</script>

子组件:

<template><div class="Son-container"><p>父组件传来的msg值是{{ msg }}</p><p>父组件传来的user值是{{ user }}</p></div>
</template><script>
export default {props: ['msg', 'user']// props: {//   msg: {//     default: '',//     type: String//   },//   user: {//     default: '',//     type: String//   }// }
}
</script>

三,子向父传值

子向父传值的方法是:利用$.emit()触发自定义事件

3.1 子组件

先在子组件中定义要传给父亲的值:
在这里插入图片描述
触发传值事件:
在这里插入图片描述
使用$.emit的方法触发自定义事件:
在这里插入图片描述

3.2 父组件

接收事件:
在这里插入图片描述
定义盛放值的容器:
在这里插入图片描述
接收数据:
在这里插入图片描述

3.3 整体代码

父组件:

<template><div class="App-container"><Son :msg="messeage" :user="user" @func="getmysonnumber"></Son></div>
</template><script>
import Son from './components/Son.vue'
export default {data() {return {messeage: '我是msg',user: '我是巧克力小猫猿',mysonnumber: 2}},components: {Son},methods: {getmysonnumber(data) {this.mysonnumber = data;console.log(this.mysonnumber);}}
}
</script>

子组件:

<template><div class="Son-container"><p>父组件传来的msg值是{{ msg }}</p><p>父组件传来的user值是{{ user }}</p><input type="button" value="我要传给父组件的值" @click="sendsonnumber"></div>
</template><script>
export default {props: ['msg', 'user'],// props: {//   msg: {//     default: '',//     type: String//   },//   user: {//     default: '',//     type: String//   }// }data() {return {sonnumber: 1}},methods: {sendsonnumber() {this.$emit('func', this.sonnumber)}}
}
</script>

四,兄弟之间的数据传递

4.1 事件总线EventBus介绍(面试高频)

我们先前已经介绍了父子组件的数据传递方式。其中,父组件给子组件传递数据,需要借助props,而子组件给父组件传递数据,需要借助自定义事件$.emit(),而兄弟组件之间传递数据的方式则需要借助EventBus。

通俗来说,EventBus是一个vue实例,是平行组件的沟通桥梁。

所以,兄弟组件进行数据传递,我们需要先定义一个EventBus,它是一个js文件:
在这里插入图片描述
这个文件也是兄弟组件进行数据传递核心,同时,两个兄弟组件都需要引入这个js文件。
在这里插入图片描述

4.2 传值方

传值使用.emit(),先定义,再写触发条件,然后是利用.emit(),先定义,再写触发条件,然后是利用.emit(),先定义,再写触发条件,然后是利用.emit()传值

<template><div class="Left-container"><button @click="send">把值传给Right</button></div>
</template><script>
import bus from './EventBus'
export default {data() {return {str: 11111}},methods: {send() {bus.$emit('sharetoRight', this.str)}}
}

4.3 接收方

接受使用$.on()进行数据接收

<template><div class="Right-container">我从Left那里接受到的值是{{ fromLeft }}</div>
</template><script>
import bus from "./EventBus"
export default {data() {return {fromLeft: 0}},created() {bus.$on('sharetoRight',(val) => {this.fromLeft = val})}
}
</script>

后记

本节讲述了vue中组件如何传递的基本方法,后续如在项目中遇到问题还会继续更新,感谢阅读!

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

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

相关文章

Servlet - Filtering (过滤器))

[TOC](Servlet - Filtering (过滤器) ) 1. What 1.1 什么是Filter Servlet过滤器Filter是一个小型的web组件&#xff0c;它们通过拦截请求和响应&#xff0c;以便查看、提取或以某种方式操作客户端和服务器之间交换的数据&#xff0c;实现“过滤”的功能。Filter通常封装了一…

深度神经网络的优化算法,进化算法优化神经网络

有哪些手段可以提升深度神经网络的泛化性能 人工神经网络以其智能性见长&#xff0c;那么神经网络能真的学到一个映射的本质吗&#xff1f;也就是说&#xff0c;对一个映射给出一定的必要的训练样本训练后&#xff0c;网络能否对样本以外的样本给出较为准确的预测。 泛化能力…

概率论与数理统计学习:随机向量(三)——知识总结与C语言实现案例

hello&#xff0c;大家好 这里是第八期概率论与数理统计的学习&#xff0c;我将用这篇博客去总结这期的知识点以及实现用C语言去做题的过程。 本期知识点&#xff1a; 条件分布 条件分布的概念离散型随机变量的条件概率分布连续型随机变量的条件概率密度 随机变量的独立性 那…

ROS学习笔记三(TF的类)

1.数据类型 数据类型定义在tf/transform_datatypes.h.里 1.1 基本数据类型(Quaternion, Vector, Point, Pose, Transform) TypetfQuaterniontf::QuaternionVectortf::Vector3Pointtf::PointPosetf::PoseTransformtf::Transform 1.2 tf::Stamped tf::Stamped在上面的数据类型…

RocketMQ 5.0:无状态代理模式的探索与实践

本文作者&#xff1a;金吉祥&#xff0c; Apache RocketMQ PMC Member&#xff0c;阿里云智能高级技术专家 背景 首先&#xff0c;让我们来看下是遇到了哪些痛点问题&#xff0c;促使我们去探索一种无状态代理的RocketMQ新架构的&#xff1b; RocketMQ 拥有一套极简的架构&am…

安卓投屏 QtScrcpy

一、电脑安装adb 版本大于1.0.40以上 40不行 adb 1.0.41下载链接 链接&#xff1a;https://pan.baidu.com/s/1WIPI-p7a4ErTLFYHaTC2kw?pwdadbt 提取码&#xff1a;adbt 安装参考 https://blog.csdn.net/M7_xbc/article/details/122957311 二、打开无线调试并且配对 手机打…

驱动开发(10/10-林雪阵)

终端输入1--->LED1点亮 终端输入2--->LED2点亮 终端输入3--->LED3点亮 终端输入0--->LED熄灭 chdev.c (底层驱动代码&#xff09; #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h>…

【webrtc】rtp 扩展头的ID

ietf 文档地址扩展头的uri 是固定的,因此识别扩展是通过uri地址,而非ID。rtp 扩展头是有个ID的 文档的说法 : 是本地的id,15保留,只可以小于15 本地标识符值 15 保留用于将来的扩展和 不得用作标识符。如果 ID 值 15 是 遇到,它的长度字段应该被忽略,处理 整个扩展应在该…

redis之AOF和RDB持久化

写在前面 因为redis数据是基于内存的&#xff0c;为了避免服务器重启或者是宕机导致数据全部丢失&#xff0c;提供了数据持久化机制&#xff0c;即AOF(Append Only File)日志和RDB快照&#xff0c;接下来我们分别看下。 1&#xff1a;AOF 1.1&#xff1a;AOF日志的实现 首先…

(附源码)计算机毕业设计SSM政府项目管理平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

回顾——PCB绘制

目录 一、原理图库原理图 二、PCB库 三、PCB 一、原理图库原理图 新建工程&#xff1a;文件——New——Project——Name&#xff08;这里复制一下&#xff09;自己选择保存路径 添加文件&#xff1a; 保存工程&#xff1a;(粘贴) 绘制原理图库、原理图 侧边栏消失&…

虚拟社会、区块链和元宇宙

1986年&#xff0c;早期的互联网供应商Quantum Link和娱乐公司Lucasfilm Games发布了第一款MMO游戏名为&#xff1a;《Habitat》基于虚拟角色的社交世界&#xff0c;玩家可以通过300波特的调制解调器(每分钟0.08美元)和用户的Commodore 64(595美元&#xff0c;按今天的价格约为…

Vue 动态换肤

效果如图&#xff1a; 源代码&#xff1a; <template><div :class"[son${temp}]" class"demo3">这是四点零八分的北京<br/>一片手的海浪翻动<br/>这是四点零八分的北京<br/>一声雄伟的汽笛长鸣<br/>北京车站高大的建…

Kafka监控EFAK(Kafka-eagle)部署与踩坑详细记录

环境 阿里云服务器centoskafka 2.4.1 &#xff08;1.1以上版本都能支持&#xff0c;低版本不太清楚了&#xff09;efak 3.0.1 当前时间官网下载的最新版&#xff08;原名叫kafka-eagle&#xff09;efak官网&#xff1a;http://www.kafka-eagle.org/jdk8 部署好的UI 部署流程 …

kafka系列——安装部署,相关命令,配置文件,底层存储结构,log和index文件

点击上方“罗晓胜”&#xff0c;马上关注&#xff0c;您的支持对我帮助很大 / 前言 / Kafka是最初由Linkedin公司开发&#xff0c;用scala语言编写的&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&…

时光机特效在哪里?推荐这三个实用软件给你

现如今有一款时光穿梭机的特效软件非常热门&#xff0c;它具有让照片中的人变年轻或者变老的功能&#xff0c;能让我们看到过去以及未来自己的样子&#xff0c;也能给我们枯燥的生活增添一点趣味感。那么大家是不是已经迫不及待地想知道时光穿梭机特效滤镜在哪了呢&#xff1f;…

Linux学习 -- docker的commit命令和本地镜像到云端

commit命令本地镜像到云端 一、commit命令 我们在使用镜像新建容器后&#xff0c;容器只是具有简易的Linux的功能&#xff0c;不具备一些常用的功能&#xff0c;如vim功能&#xff0c;因此我们需要给容器加上一些我们需要的功能。 使用如下命令&#xff1a; docker commit提交容…

不使用第三方库怎么实现【前端引导页】功能?

前言 随着应用功能越来越多&#xff0c;繁多而详细的功能使用和说明文档&#xff0c;已经不能满足时代追求 快速 的需求&#xff0c;而 引导页&#xff08;或分步引导&#xff09; 本质就是 化繁为简&#xff0c;将核心功能以更简单、简短、明了的文字指引用户去使用对应的功能…

Oracle数据库 | SQL语句解析

个人主页&#xff1a;&#x1f497;wei_shuo的个人主页 &#x1f3c0; Hello World &#xff01;&#x1f3c0; 文章目录一.Oracle启动及登录1.1 服务手启动即关闭1.2 SQL* PLUS命令二. 表的创建和维护2.1 创建表2.2 修改表2.3 重命名表2.4 截断表2.5 删除表三. 数据完整性与约…

【C++学习】类与对象(中)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 类与对象&#xff08;中&#xff09;&#x1f638;构造函数&#x1f639;概念&#x1f639;特性&…