组件通信(父传子,子传父,跨组件通信)
组件(component)是vue.js最核心的功能,是可扩展的HTML元素。每个页面都是一个HTML。以.vue结尾的文件,都可以叫组件。
场景:将一个完整的项目,拆分成不同的功能模块。
注意:组件首字母要大写。
创建和使用组件
A.组件放在src中的components中
如图: |
代码显示:
// App.vue组件
<template><div class="div1"><h3>这是App.vue组件</h3></div></template><style scoped>
.div1{background-color: aqua;
}
</style>
B. 导入组件:import xxx from 'xxx'
// App.vue组件
<template><div class="div1"><h3>这是App.vue组件</h3></div></template><script setup>
// 组件已创建好,需在App.vue中导入 如下import HelloWorld from './components/HelloWorld.vue';import TheWelcome from './components/TheWelcome.vue';
</script><style scoped>
.div1{background-color: aqua;
}
</style>
C.使用组件
- HelloWorld.vue
<template><h3>子组件HelloWorld</h3>
</template>
- TheWelcome.vue
<template><div class="div2"><a href="">子组件TheWelcome</a></div>
</template><style scoped>
.div2{background-color: yellowgreen;height: 50px;width: 150px;
}
</style>
- App.vue
// App.vue组件
<template><div class="div1"><h3>这是App.vue组件</h3></div><!-- App.vue使用了HelloWorld、TheWelcome组件 --><HelloWorld/><TheWelcome/>
</template><script setup>
// 组件已创建好,需在App.vue中导入 如下import HelloWorld from './components/HelloWorld.vue';import TheWelcome from './components/TheWelcome.vue';
</script><style scoped>
.div1{background-color: aqua;
}
</style>
一、父传子
使用props实现父传子通信,从父组件传输,在子组件接收。父组件通过在子组件标签上绑定(v-on)自定义属性来传递数据。
- App.vue
// App.vue组件
<template><div class="div1"><h3>这是App.vue组件</h3></div><!-- App.vue使用了HelloWorld、TheWelcome组件 --><!-- 实验1:在父组件中,通过v-bind的增强语法,向子组件传递普通对象数据 --><HelloWorld v-bind="propStudent" /><!-- 实验2:在父组件中,通过v-bind的增强语法,向子组件传递响应式对象数据 --><Swiper v-bind="proTeacher"/><button @click="addTeacherAge">Swiper增加教师年龄</button><br><!-- 实验3:在父组件中,通过设置子组件的“字符串型”属性,用于向子组件传递字符串数据 --><TheWelcome propName="王五" propAge="90"/></template><script setup>
import {reactive } from 'vue';
import HelloWorld from './components/HelloWorld.vue';
import Swiper from './components/Swiper.vue';
import TheWelcome from './components/TheWelcome.vue';
// 实验1const propStudent = { // 这里使用const声明了一个名为propStudent的常量propName:"张三",propAge:20,}
// 实验2const proTeacher = reactive({name:"韩梅梅",age:30,})
const addTeacherAge = () => {proTeacher.age++;console.log(`教师年龄为${proTeacher.age}`)
}
</script><style scoped>
.div1{background-color: aqua;
}
</style>
-
HelloWorld.vue
<template><h3>子组件HelloWorld</h3>
</template><script setup>// 定义对象类型的属性 (用于接收上级组件传递过来的对象类型数据) const props = defineProps({propName:{type:String // 类型为字符串},propAge:{type:Number, // 类型为数字// 是否必需传值(若必须传值却没有传,则控制台会给出警告)required:true, default:18 // 默认值}, })console.log(props);
</script>
- Swiper.vue
<script setup>const props = defineProps(["name","age"])console.log(props)
</script><style scoped></style>
- TheWelcome.vue
<template><h1>子组件TheWelcome</h1>
</template><script setup>// props是properties的缩写,意思为属性,// defineProps定义的属性是提供给外部进行设置使用的// 定义字符串类型的属性(用于接收上级组件传递过来的字符串数据) const props = defineProps(["propName", "propAge"])console.log(props);
</script><style scoped>
.div2{background-color: yellowgreen;height: 50px;width: 150px;
}
</style>
二、子传父
子组件通$emit方法触发一个自定义事件,父组件在使用子组件标签时监听这个事件来获取数据。
例如:在子组件定义一个 emit(名称可自定义)对象,存储自定义事件。在这里定义了两个自定义事件,分别是“getPerson”
和“addPerson
”。再在父组件设置监听事件监听子组件。
- App.vue
// 父组件
<script setup>import { ref } from 'vue';import Header from './components/Header.vue';const person_num = ref(1) //初始值为1// 定义emitPrintPerson函数接收一个参数dataconst emitPrintPerson = (data) => {console.log(`下级组件发射过来的数据为: ${data.name} , ${data.age}`);}const emitAddPersonNum = (data) => {person_num.value += data}
</script><template><div id="root_component"><h3>我是上级组件</h3><h5>计算机学院总人数:{{ person_num }}</h5><!-- 监听两个子组件的事件 --><Header v-on:getPerson="emitPrintPerson" @addPerson="emitAddPersonNum" /> </div>
</template><style scoped>#root_component {width: 50%;background-color: antiquewhite;}
</style>
- Header.vue
<script setup>/* defineEmits是Vue3的编译时宏函数,用于子组件向父组件发送自定义事件 *///1.用宏函数defineEmits定义一个名为 emits 的对象//(名字可以随便取), 用于存储自定义事件//这行代码完成了事件的定义声明,告知 Vue 框//架该组件有这两个可以触发并传递数据给父组件的事件。const emits = defineEmits(["getPerson", "addPerson"])//2.向上级组件发射名为“getPerson”的自定义事件,//并同时发射数据emits("getPerson", { name:"李雷", age: 18 })const addPerson = () => {//3.向父组件发射名为“addPerson”的自定义事件,//并同时发射数据emits("addPerson", 1)}
</script><template><div><h3>我是下级组件</h3><!-- 这个按钮绑定了@click事件监听器,点击时会触发addPerson函数 --><button @click="addPerson">添加人数</button></div>
</template><style scoped>div {width: 50%;background-color: gray;}
</style>
三、跨组件通信(依赖注入方法)
- provide+inject(提供和注入方法)
传统组件传值是逐级传递的,必须一级一级传递,而该方法不用一级一级注入,可以使用provide提供数据,由inject注入数据。无论层级多深,都可以注入由父组件提供给整条链路的依赖。
App.vue
<template><div id="div1"><h2>跨组件传值(依赖注入)</h2>App.vue <br><input v-model="ver" /><div id="div2"><Base/></div></div>
</template><script setup>
// 从App.vue中提供数据
// provide定义提供可使用的数据,语法:provide(变量名称,值)
import { provide } from 'vue'
import Base from './views/Base.vue'
// 定义ver的值
const ver = 200;
//在后面的组件中可以通过version取到ver的值
provide('version',ver)
</script><style scoped>
#div1{width: 500px;height: 400px;background-color: aquamarine;
}
#div2{width: 200px;height: 100px;background-color: darkcyan;
}
</style>
Base.vue
<template><div>Base.vue<input v-model="ver" /></div>
</template><script setup>
// inject注入父组件provide的变量,
//语法如下:inject(变量名称,可选的默认值)
import { inject } from 'vue'const ver = inject('version')
console.log(ver);</script><style lang="scss" scoped></style>
- 响应式传值
同时,Base改变App也会改变。
直接将ver设置为响应式对象,其他不用改动。
相关文章:
组件通信(父传子,子传父,跨组件通信)
组件(component)是vue.js最核心的功能,是可扩展的HTML元素。每个页面都是一个HTML。以.vue结尾的文件,都可以叫组件。 场景:将一个完整的项目,拆分成不同的功能模块。 注意:组件首字母要大写。 …...
JWT 令牌:原理、应用与安全考量
深入理解 JWT 令牌:原理、应用与安全考量 文章目录 深入理解 JWT 令牌:原理、应用与安全考量一、引言二、JWT 令牌与传统方式的区别(一)传统身份验证方式的特点与局限(二)JWT 令牌的优势 三、JWT 令牌的字段…...
YOLOv5+pyqt5+摄像头在特定条件下进行目标检测并采集原始数据
项目介绍 项目地址 GitHub - biabu0/Yolov5_D435i: 通过YOLOV5与pyqt5实现一个使用D435i深度摄像头采集特定需求与场景下的深度数据的小程序 通过YOLOV5对指定的区域进行检测,当检测到目标进入特定区域时,开始保存数据,摄像头采用D435i深度…...
12.6深度学习_模型优化和迁移_整体流程梳理
七、整体流程梳理 1. 引入使用的包 用到什么包,临时引入就可以,不用太担心。 import time import osimport numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvisio…...
TCP 和 UDP 可以使用同一个端口吗
TCP 和 UDP 可以使用同一个端口吗 简单来说 可以使用同一个端口,关键在于它们属于不同的传输层协议,在内核中是两个完全独立的软件模块,各自维护独立的端口空间,虽然端口号相同,但通过协议类型可以确定是哪种协议。 …...
信而泰网络测试仪校准解决方案
一、影响仪表精度的因素 网络测试仪是用于对数据网络及其相关设备性能参数进行测试的仪表,可以模拟网络终端产生流量,进行网络性能测试,对网络状态进行实时监测,分析和统计。数字计量对于精准数据的网络测试仪来说是一剂强心针&a…...
Java 实现给pdf文件指定位置盖章功能
Java 实现给pdf文件指定位置盖章功能 开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路. 这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章…...
机器学习支持向量机(SVM)算法
一、引言 在当今数据驱动的时代,机器学习算法在各个领域发挥着至关重要的作用。支持向量机(Support Vector Machine,SVM)作为一种强大的监督学习算法,以其在分类和回归任务中的卓越性能而备受瞩目。SVM 具有良好的泛化…...
解决 MySQL 启动失败与大小写问题,重置数据库
技术文档:解决 MySQL 启动失败与大小写问题,重置数据库 1. 问题背景 在使用 MySQL 时,可能遇到以下问题: MySQL 启动失败,日志显示 “permission denied” 或 “Can’t create directory” 错误。MySQL 在修改配置文…...
计算生成报价单小程序系统开发方案
计算生成报价单小程序报价系统,是根据商品品牌、类型、型号、规格、芯数、特性、颜色、分类进行选择不同的参数进行生成报价单,要求报价单支持生成图片、pdf、excel表格。 计算生成报价单小程序系统的主要功能模块有: 1、在线生成报价单&…...
若依集成Uflo2工作流引擎
文章目录 1. 创建子模块并添加依赖1.1 新建子模块 ruoyi-uflo1.2 引入 Uflo2 相关依赖 2. 配置相关 config2.1 配置 ServletConfig2.2 配置 UfloConfig2.3 配置 TestEnvironmentProvider 3. 引入Uflo配置文件4. 启动并访问 Uflo2 是由 BSTEK 自主研发的一款基于 Java 的轻量级工…...
STM32模拟I2C通讯的驱动程序
目录 STM32模拟I2C通讯的驱动程序 开发环境 引脚连接 驱动程序 STM32模拟I2C通讯的驱动程序 开发环境 立创天空星开发板、主控芯片为STM32F407VxT6 引脚连接 使用stm32的PB9引脚模拟I2C时钟线SCL、PB8引脚模拟I2C数据线SDA 驱动程序 i2c.h文件如下:#ifndef…...
Unity简单操作及使用教程
Unity 是一款强大的跨平台游戏引擎,它不仅支持 2D 和 3D 游戏的开发,还可以用于虚拟现实 (VR)、增强现实 (AR)、动画、建筑可视化等多个领域。Unity 提供了完整的开发环境,具有丰富的功能、工具和资源,可以帮助开发者快速实现创意…...
网络安全法-监测预警与应急处置
第五章 监测预警与应急处置 第五十一条 国家建立网络安全监测预警和信息通报制度。国家网信部门应当统筹协调有关部门加强网络安全信息收集、分析和通报工作,按照规定统一发布网络安全监测预警信息。 第五十二条 负责关键信息基础设施安全保护工作的部门…...
qt 设置系统缩放为150%,导致的文字和界面的问题
1 当我们设置好布局后,在100%的设置里面都是正常的,但是当我们修改缩放为150%后,字体图标,界面大小就出现问题了,这就需要我们设置一些参数。 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QCoreAppl…...
Scala的正则表达式二
验证用户名是否合法 规则 1.长度在6-12之间 2.不能数字开头 3.只能包含数字,大小写字母,下划线def main(args: Array[String]): Unit {val name1 "1admin"//不合法,是数字开头val name2 "admin123"//合法val name3 &quo…...
软考系分:今日成绩已出
前言 今年报考了11月份的软考高级:系统分析师。 考试时间:11月9日。 总体感觉偏简单,但是知识点记得不牢,估计机会不大。 今日 12.11 ,成绩已出,每科总分 75分,全部45分以上为通过。 成绩总…...
DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(一)
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
Docker 安装 sentinel
Docker 安装系列 1、拉取 [rootTseng ~]# docker pull bladex/sentinel-dashboard Using default tag: latest latest: Pulling from bladex/sentinel-dashboard 4abcf2066143: Pull complete 1ec1e81da383: Pull complete 56bccb36a894: Pull complete 7cc80011dc6f: Pull…...
PyCharm 2024.1 解锁版 (Python集成开发IDE)详细安装步骤
分享文件:PyCharm 2024.1 解锁版 (Python集成开发IDE) 链接:https://pan.xunlei.com/s/VOAa_CiVVvZnyQgLfpmCIOABA1 提取码:cx4h 安装步骤 1、下载解压后点击如下进行安装 2、选择安装路径 3、默认勾选将PyCharm创建桌面快捷方式 4、默认…...
SQL中的函数介绍
大多数SQL实现支持以下类型 文本函数:用于处理文本字符串(如删除或填充值,转换值为大写或小写)。数值函数:用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)。日期和时间函…...
【工业机器视觉】基于深度学习的水表盘读数识别(2-数据采集与增强)
【工业机器视觉】基于深度学习的仪表盘识读(1)-CSDN博客 数据采集与增强 为了训练出适应多种表型和环境条件的模型,确保数据集的质量与多样性对于模型的成功至关重要。高质量的数据不仅需要准确无误、具有代表性,还需要涵盖尽可能…...
爬虫基础知识点
最近看了看爬虫相关知识点,做了记录,具体代码放到了仓库,本文仅学习使用,如有违规请联系博主删除。 这个流程图是我使用在线AI工具infography生成的,这个网站可以根据url或者文本等数据自动生成流程图,挺…...
高效利用资源:分布式有状态服务的高可靠性设计
在分布式系统设计中,实现有状态服务的高可靠性通常采用主备切换的方式。当主服务停止工作时,备服务接管任务,例如通过Keepalive实现VIP的切换以保证可用性。然而,这种方式存在资源浪费的问题,因为备服务始终处于空转状…...
aws(学习笔记第十六课) 使用负载均衡器(ELB)解耦webserver以及输出ELB的日志到S3
aws(学习笔记第十六课) 使用负载均衡器(ELB)以及输出ELB的日志到S3 学习内容: 使用负载均衡器(ELB)解耦web server输出ELB的日志到S3 1. 使用负载均衡器(ELB) 全体架构 使用ELB(Elastic Load Balancer)能够解耦外部internet访问和web server之间的耦合,…...
关于php://filter过滤器
常规的php://filter过滤器: <?php //index.php include($_REQUEST[file]); ?> <?php //flag.php $flagflag{test_flag}; ?> 同过base64读取flag.php的类容: 常用payload: (这是最常用的payload) ph…...
数据安全法-政务数据安全与开放
第五章 政务数据安全与开放 第三十七条 国家大力推进电子政务建设,提高政务数据的科学性、准确性、时效性,提升运用数据服务经济社会发展的能力。 第三十八条 国家机关为履行法定职责的需要收集、使用数据,应当在其履行法定职责的范围内依…...
MySQL数据库的数据类型
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 MySQL数据库的数据类型 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 数据类型分类 …...
前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码
技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址: git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…...
什么是线程安全
🌈🌈🌈今天给大家分享的是:什么是线程安全 目录 线程安全的定义 线程安全的级别 (1)不可变 (2)绝对线程安全 (3)相对线程安全 (4)线程非安全…...
如何做影视网站的标题/简述搜索引擎优化的方法
作网页时,咱们一般须要考虑到不一样电脑屏幕尺寸,以及不一样手机屏幕大小等问题,解决样式发生改变的状况,那么如何解决呢?如今主要是采用自适应来解决高度,宽度的,以及图片自适应问题࿰…...
什么网站容易做/seo精华网站
转自:http://blog.chinaunix.net/u1/51538/showart.php?id418572 //算法1,查表法,典型的空间换时间,在现代的CPU上,这种算法具有最快的速度。 unsigned char reverse1(unsigned char c) { static unsigned ch…...
建设银行网站 个人客户/影视站seo教程
本题要求实现一个函数,找到并返回链式表的第K个元素。 函数接口定义: ElementType FindKth( List L, int K );其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef Ptr…...
网站推销怎么做ppt/安卓优化清理大师
润乾集算报表作为纯JAVA报表可以很方便嵌入到J2EE页面中使用,目前集算报表提供了多种发布方式供用用户将报表嵌入到JSP页面时使用。集算报表中报表有参数报表和数据报表两种,下面来看一下这两类报表的页面嵌入方式。参数报表由于参数报表大多数都和数据报…...
公司网站域名申请/内江seo
直接在centos操作系统安装 一、安装 pip install virtualenv二、创建环境 cd /opt/metersphere/datamkdir pythoncd python/# 当前文件夹下创建虚拟环境 virtualenv --copies .# 激活虚拟环境 下次进去就是在data目录下 source python/bin/activate source /bin/activate# 安…...
哪些网站可以做画赚钱/百度竞价推广方法
目录 前言 一、创建快捷方式 二、选择你的自定义图标 1. 下载png图 2. 获取ico图标文件 三、更改快捷方式图标 前言 今天在Windows10下安装了Spyder编辑器,好用归好用,但是在创建快捷方式后面对那类似于IDLE的图标实在是左右看着都难受࿰…...