19.组件之间传递数据

news2024/11/20 6:33:58

不同组件传递数据的时候,最好不要直接传递复杂数据类型(比如对象,数组)

前端需要处理的数据层级一般不会很多,需要在多处使用的数据一般会被放到数据库中

目录

1  组件的关系

2  父向子传递数据-props

3  子向父传递数据-自定义事件

4  父子组件同步数据 v-model与emits

5  兄弟组件传递数据

6  任意两个组件传递数据 EventBus

7  向后代组件提供数据 provide与inject

7.1  基本使用

7.2  让数据可变

8  vuex


1  组件的关系

我们通常认为组件的关系只有两种,父子关系与兄弟关系

像A与G,我们认为AG是父子关系,A为G的父组件

像B与E,我们认为BE是兄弟关系,BE互为兄弟组件

我们现在搞三个组件,在App.vue中只展现FATHER组件

FATHER组件中展示SON1组件

SON1组件是下面这样的,SON组件的文字颜色都是红色的

这三个组件的关系是这样的,App是FATHER的父组件,FATHER是SON1的父组件

2  父向子传递数据-props

我们现在想让父组件给子组件传递数据,我们使用props的方式

首先子组件要接props

父组件要发props,props绑上FATHER组件的data

打开后是这样的

我们修改父组件的数据,会发现子组件的内容发生了改变

如果你使用props传复杂数据(比如对象)给子组件,只是传递了引用过去,如果你在子组件对复杂数据修改是会作用于父组件的data的(不建议在子组件修改数据,因为最好将props当作只读数据)

在修改数据的时候要从 父组件修改,如果修改父组件的数据,那么子组件的数据会自动发生改变,如果从 子组件修改,那么只会改动子组件的数据(会出 不建议修改props的警告),父组件的数据不会发生变化

3  子向父传递数据-自定义事件

子组件向父组件传递数据需要通过method的方式来搞

红色框是 子向父传递数据有关的代码,橘黄色是数据的传递过程,黄色是函数的触发过程

  • $emit是用代码触发自定义事件用的,第一个参数是要触发什么自定义事件,第二个参数是这个自定义事件带的数据(可以理解为自定义事件的事件对象)

刚打开页面的时候,不会接到子组件的数据

当我们点击 内容为1号子组件的p标签 的时候,黄色箭头开始行动,最后让父组件收到子组件的数据

你可以在 子组件 中声明这个自定义事件,声明与否不影响使用

点击后可以触发事件

4  父子组件同步数据 v-model与emits

子定义method,父使用v-model

自定义事件的名称的格式必须为 update:[props的名字]

打开后是这样的

点击子组件+1后,父子的count都会+1

点击父组件+1后,父子的count也都会+1

5  兄弟组件传递数据

兄弟之间传递数据,可以用 兄弟A -> 父 -> 兄弟B

6  任意两个组件传递数据 EventBus

EventBus不仅局限于兄弟间传值,子向父,父向子,两个任意的组件都可以使用EventBus进行通信

在 vue2 中,兄弟组件之间数据共享方案为EventBus,详情可以看一下这个 Vue2.0-27.兄弟组件数据共享 - 演示EventBus的使用_哔哩哔哩_bilibili

在vue3中移除了$on这个接口,所以我们不能像2一样写了,但也有替代方法,安装第三方包 mitt

  • 方法参考 Vue3全局组件通信之EventBus - 简书

安装之后创建一个eventBus.js,我现在让SON1传递数据给SON2,所以我直接放在他们的同级目录下

我这里的eventBus.js用的是尽可能不改老项目的方法,如果是新项目,你可以使用 mitt().on()与mitt().emit()

7  向后代组件提供数据 provide与inject

7.1  基本使用

后代关系就是爷孙关系这种,父子关系也包含在后代关系中

我们现在在app组件中使用 FATHER3,然后再FATHER3中使用SON6。这样APP与SON6就构成了后代关系

使用provide提供数据,使用inject接受数据,然后正常使用就行了

7.2  让数据可变

默认情况下 provide 是不可变的,在调试工具中你发现他修改不了

在我们加入 data 中转一下后,provided依然不会变

打开后是这样的

修改data没有改变provided

如果你想让provided发生变化,你应该这样写

这个时候当你修改data的时候,provided也会被修改,子组件也会接到新的数据

值两边的双引号不是我们想要的,接受的时候使用 .value 可以直接获取值

这样就直接拿到值了

8  vuex

vuex将数据放在STORE中供每一个组件使用,等后面有使用到会再更新vuex的使用方式

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

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

相关文章

分布式任务调度平台 XXL-JOB 实战

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

Scrum敏捷估算

无论是团队研发一款产品或者开发某一个项目,我们都需要回答“我们大概什么时间能够完成?”, 或者到某一个时间点,我们能够做到什么程度, 因此和传统的开发模式一样,我们在工作开始之前需要对我们需要做的事…

Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)

首先学习如何使用 Vim 打开文件。 Vim 打开文件 使用 Vim 打开文件很简单,例如在命令行模式下打开一个自己编写的文件 /test/vi.test,打开方法如下: [rootitxdl ~]# vim /test/vi.test 刚打开文件时 Vim 处于命令模式,此时文件…

CTFshow-pwn入门-前置基础pwn26-pwn28

什么是ASLR 大多数的攻击都基于这样一个前提,即攻击者知道程序的内存布局,需要提前知道shellcode或者其他一些数据的位置。因此,引入内存布局的随机化能够有效增加漏洞利用的难度,其中一种技术就是ASLR(Address Space…

无线wifi视频传输方案|基于qca9531方案SKW99的无线视频流云端推送方案

为满足物联网智慧校园,智能家居,智慧工厂,智能交通、智慧博物馆、培训机构等不同行业实时直播的需求。本篇以集成200万高清摄像头功能的高通方案qca9531 wifi模块SKW99为为例,简单介绍基于WiFi技术的无线视频流云端推送方案。 1、…

上位机与两台PLC之间无线PPI通信

在实际系统中,人机界面与PLC通常不在一起,中心计算机一般放置在控制室,而PLC安装在现场车间,二者之间距离往往从几十米到几千米。如果布线的话,需要挖沟施工,比较麻烦,这种情况下比较适合采用无…

0基础学习VR全景平台篇第47篇:底部菜单-场景/分组复制功能

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,底部菜单—场景/分组复制功能操作。 功能位置示意 一、本功能将用在哪里? 平台用户在编辑作品时可以使用本功能将作品中的某一分组或者某一场景进行复…

岩土工程监测案例:完整链条的振弦传感器、采集仪和在线监测系统

岩土工程监测案例:完整链条的振弦传感器、采集仪和在线监测系统 在岩土工程监测中,振弦传感器被广泛应用于测量土体或岩体的振动情况,以了解地震或其他振动事件对结构物或地基的影响。振弦传感器具有高精度、快速响应、易于安装和低成本等优…

django校园宿舍管理系统-计算机毕设 附源码84831

django校园宿舍管理系统 摘 要 本论文主要论述了如何使用Django开发一个校园宿舍管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校园宿舍管理系统的当…

RocketMQ部署之动态设置JVM启动参数

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 线上的RocketMQ集群有运行一段时间了。比如测试环境和线上环境的RocketMQ集群部署的机器内存大小肯定不一样。所以可能要写多个部署脚本。非常麻烦 官方的部…

一张图秒懂嵌入式Linux系统的启动流程

一图胜千言!看图: 上图是嵌入式系统启动流程图,图中红色的数字圆点表示启动的先后顺序。主要分为 4 个阶段,分别是:第一阶段 bootloader,第二阶段uboot,第三阶段内核启动,第四阶段 a…

【数据管理架构】OLAP 与 OLTP:有什么区别?

这些术语经常相互混淆,那么它们的主要区别是什么?您如何根据自己的情况选择合适的术语? 我们生活在一个数据驱动的时代,使用数据做出更明智决策并更快响应不断变化的需求的组织更有可能脱颖而出。您可以在新的服务产品&#xff08…

理想吹响城市NOA号角:激光雷达车型又火了

作者 | 德新编辑 | 王博 2023下半年,以华蔚小理为代表的智能驾驶头部厂商,其高阶辅助驾驶全面进城。 在过去短短一周时间里,蔚来、华为、理想、小鹏紧锣密鼓悉数公布了新进展。此外据HiEV了解,比亚迪、智己、飞凡等品牌的智驾团队…

excel爬虫相关学习2:vba 爬虫相关xmlhttp

目录 前言:vba 爬虫相关xmlhttp的方法 1 什么是xmlhttp 1.1 定义 1.2 特点 1.3 创建xmlhttp对象的过程 1.4 XMLHTTP对象创建的几种方法: 2 XMLHTTP方法: 2.1 xmlhttp.open(Method, Url, Async, User,Password) 2.1.1 xmlhttp.open(…

再谈JWT

什么是JWT JSON Web Token是一个开发标准(RFC 7519),定义了一个紧凑且独立的方式,可以将各方之间的信息作为JSON对象进行安全传输,该信息可以验证和信任,因为是经过数字签名的。 JWT是JSON Web Token的缩写,是一种轻…

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 (1)Inception V1 Inception是一种深度学习模型,也被称为GoogLeNet,因为它是由Google的研究人员开发的。Inception模型的主要特点是它的“网络中的网络”结构,也就是说&#x…

编译原理笔记6:从正规式到词法分析器(3):DFA最小化、词法分析器的构造、Lex 使用示例

目录 从 DFA 到最小 DFA等价可区分划分算法:最小化 DFA 的状态数(DFA化简)手写 DFA 词法分析器的构造Lex 使用示例 从 DFA 到最小 DFA 关于星闭包的补充:一个语言被认为是所有可能字的子集。所有可能字的集合可以被认为是所有可能…

手机操作系统的沉浮往事(下)

接上篇:手机操作系统的沉浮往事(上) 2007年,是手机市场发生历史性转折的一年。 这一年的1月9日,在Macworld 2007大会上,史蒂夫乔布斯正式发布了第一代iPhone。 改变人类科技史的一天 iPhone的问世&#xff…

LeetCode - #83 删除排序链表中的重复元素

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

收藏 | 14 种免费 GIS 软件

如果你想绘制一幅世界地图,会选择什么GIS软件呢,ArcGIS、GlobalMapper这些都是国外比较出名的商业GIS软件,当然在国内很容易找到可用的版本,但是也可以使用免费的GIS软件完成所有操作。 这些免费的GIS软件为您提供了完成工作的效…