当前位置: 首页 > news >正文

class 9: vue.js 3 组件化基础(2)父子组件间通信

目录

  • 父子组件之间的相互通信
    • 父组件传递数据给子组件
      • Prop为字符串类型的数组
      • Prop为对象类型
    • 子组件传递数据给父组件

父子组件之间的相互通信

  • 开发过程中,我们通常会将一个页面拆分成多个组件,然后将这些组件通过组合或者嵌套的方式构建页面。组件的嵌套由父组件和子组件组成,它们之间的通信如下图所示
    在这里插入图片描述
  • 父组件传递数据给子组件是通过props属性实现的;而子组件传递数据给父组件,是通过触发事件$emit实现的

父组件传递数据给子组件

Prop为字符串类型的数组

  • Props是在组件上注册自定义属性的一种方式。当父组件为自定义属性赋值后,子组件可以通过属性名获取对应的值。Props一般可用来传递字符串类型的数组或者对象类型
<!--ShowMessage.vue-->
<script>
export default {props: ['title', 'content']
}
</script><template><div class="show-message"><h4>{{title}}</h4><div>{{content}}</div></div>
</template><style scoped></style>
<!--App.vue-->
<template><div class="app">
<!--    1. 直接传递字符串--><ShowMessage title="我是标题" content="我是内容"></ShowMessage>
<!--    2. 绑定字符串类型的变量--><ShowMessage :title="title" :content="content"></ShowMessage>
<!--    3. 绑定对象中字符串类型的属性--><ShowMessage :title="message.title" :content="message.content"></ShowMessage>
<!--    4. 直接绑定一个对象,会自动将对象的每个属性拆出来逐一绑定--><show-message v-bind="message"></show-message></div>
</template>
<script>
import ShowMessage from "./ShowMessage.vue";
export default {components: {ShowMessage,},data() {return {title: "我是标题title",content: '我是内容content',message: {title: '我是标题message.title',content: '我是内容message.content'}}}
}
</script>
  • 上面实现了从父组件app传递数据到子组件ShowMessage

Prop为对象类型

<!--ShowMessage.vue-->
<script>
export default {// 1. props是数组// props: ['title', 'content']// 2. props是对象props: {title: String, // 定义title属性为String类型 (这里是简写, 下面content属性是完整的写法)content: {type: String, // 定义参数类型为String类型required: true, // 父组件使用该组件时必须传递该参数,否则控制台会出现警告default: '我是内容的默认值' // 如果父组件使用该组件时没有传递content参数,则使用默认值}}
}
</script><template><div class="show-message"><h4>{{title}}</h4><div>{{content}}</div></div>
</template><style scoped></style>
  • Props支持camelCase(驼峰)和kebab-case(连字符分隔)这两种方式,在HTML中,属性名不分大小写,浏览器会将所有大写字符解释为小写字符。因此,在模板中使用camelCase命名法的Props时,也可以使用其等效的kebab-case语法。
  • 例如我们为ShowMessage.vue子组件添加一个messageInfo属性。该属性支持camelCasekebab-case两种方式,如下,这两种方式是等价的
<ShowMessage message-info="我是message-info字符串" content="">
</ShowMessage>
<show-message messageInfo="我是messageInfo字符串" content="">
</show-message>
  • 我们只需要在ShowMessage.vue文件中把props改成下面这样即可
<script>
export default {// 1. props是数组// props: ['title', 'content']// 2. props是对象props: {title: String, // 定义title属性为String类型 (这里是简写, 下面content属性是完整的写法)content: {type: String, // 定义参数类型为String类型required: true, // 父组件使用该组件时必须传递该参数,否则控制台会出现警告default: '我是内容的默认值' // 如果父组件使用该组件时没有传递content参数,则使用默认值},messageInfo: {type: String,}}
}
</script>
  • 这样就能在组件ShowMessage中接收到父组件传进来的messageInfo属性了
  • 除了Props属性,我们还经常会为组件传递id,class等属性,这些属性被称为非Props的属性。当我们为一个组件传递某个属性,但是该属性并没有定义对应的propsemits时,就称之为非Props的属性,常见的有class,style,id等。当组件只有单个根节点时,这些非PropsAttribute将被自动添加到根节点的属性中,这被称为属性继承。如下所示,虽然在NoPropAttribute组件中并没有定义Props,但是id,class,name这三个属性还是被自动添加到了根节点的属性中
<!--NoPropAttribute.vue-->
<script setup></script><template><div class="no-prop-attribute">该子组件没有定义任何的props属性</div>
</template><style scoped></style>
<!--App.vue-->
<script setup>import NoPropAttribute from "@/chapters/chapter05/NoPropAttribute.vue";
</script><template><div class="app"><no-prop-attribute id="coder" class="why" name="coderwhy"></no-prop-attribute></div>
</template><style scoped></style>

在这里插入图片描述

  • 那么我们有时候有这样的场景,我们不希望组件的根元素继承属性。那么该如何禁用非Props的属性继承呢?在组件中设置inheritAttr: false即可。可以通过$attrs访问所有的非Props的属性,并应用于根元素之外的其他元素。如下所示
<!--NoPropAttribute.vue-->
<script>
export default {inheritAttrs: false,
}
</script><template><div class="no-prop-attribute">该子组件没有定义任何的props属性</div>
</template><style scoped></style>

在这里插入图片描述

  • 如果想获取非Props的属性,需要使用$attr获取,如下
<!--NoPropAttribute.vue-->
<script>
export default {inheritAttrs: false,
}
</script><template><div class="no-prop-attribute" :id="$attrs.id">该子组件没有定义任何的props属性</div>
</template><style scoped></style>

子组件传递数据给父组件

  • 子组件传递数据给父组件的需求也是非常普遍的,例如,子组件发生点击事件,需要传递一些索引等信息给父组件,父组件再进行刷新数据等操作, 下面是一个例子
<!--App.vue-->
<script>
import CounterOperation from "@/chapters/chapter06/CounterOperation.vue";
export default {components: {CounterOperation},data() {return {counter: 0}},methods: {addOne() {this.counter++},subOne() {this.counter--}}
}
</script><template><div><h4>当前计数: {{counter}}</h4><counter-operation @add="addOne" @sub="subOne"></counter-operation></div>
</template><style scoped></style>
<!--CounterOperation.vue-->
<script>
export default {emits: ["add", "sub"],methods: {increment() {this.$emit("add")},decrement() {this.$emit("sub")}}
}
</script><template><div><button @click="increment">+1</button><button @click="decrement">-1</button></div>
</template><style scoped></style>
  • 在子组件中定义触发事件的名称emits: ["add", "sub"],父组件中以v-on的形式传入要监听的事件名称,并绑定到对应的方法中,例如@add="addOne",然后子组件中发生事件的时候,根据事件名称,使用$emit函数触发对应的事件,例如this.$emit("add")

相关文章:

class 9: vue.js 3 组件化基础(2)父子组件间通信

目录 父子组件之间的相互通信父组件传递数据给子组件Prop为字符串类型的数组Prop为对象类型 子组件传递数据给父组件 父子组件之间的相互通信 开发过程中&#xff0c;我们通常会将一个页面拆分成多个组件&#xff0c;然后将这些组件通过组合或者嵌套的方式构建页面。组件的嵌套…...

Laravel|Lumen项目配置信息config原理

介绍 Laravel 框架的所有配置文件都保存在 config 目录中。每个选项都有说明&#xff0c;你可随时查看这些文件并熟悉都有哪些配置选项可供你使用。 使用 您可以在应用程序的任何位置使用全局 config 辅助函数轻松访问配置值。 可以使用“点”语法访问配置值&#xff0c;其中…...

2024系统分析师考试---论区块链技术及其应用

试题三论区块链技术及其应用 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域,从网络层面来讲,区块链是一个对等网络(Peer to Peer,P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节…...

为您的 Raspberry Pi 项目选择正确的实时操作系统(RTOS)

在嵌入式系统设计中&#xff0c;实时操作系统&#xff08;RTOS&#xff09;的选择对于确保项目的实时性能和可靠性至关重要。Raspberry Pi&#xff0c;尤其是其最新的RP2040微控制器&#xff0c;为开发者提供了一个功能强大的平台来实现各种实时应用。本文将探讨如何为您的Rasp…...

鸿蒙应用的Tabs 组件怎么使用

鸿蒙应用中的Tabs组件是一个用于通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。以下是Tabs组件的使用方法&#xff1a; 一、基本结构 Tabs组件的页面组成包含两个部分&#xff0c;分别是TabContent和TabBar。TabContent是内容页&#xff0c;TabB…...

第四天 文件操作与异常处理

在Python中&#xff0c;文件操作是处理输入输出的基本操作之一&#xff0c;而异常处理则用于管理潜在的错误情况&#xff0c;确保程序的健壮性和稳定性。下面将介绍Python中的文件操作和异常处理的基本用法。 文件操作 打开文件 使用内置的 open() 函数可以打开一个文件&…...

【密码分析学 笔记】ch3 3.1 差分分析

ch3 分组密码的差分分析和相关分析方法 3.1 差分分析 评估分组密码安全性通用方法可用于杂凑函数和流密码安全性 预备知识&#xff1a; 迭代性分组密码&#xff08;分组密码一般结构&#xff09;简化版本 mini-AES CipherFour算法 3.1.1 差分分析原理 现象&#xff1a;密…...

Go:strings包的基本使用

文章目录 string前缀和后缀字符串包含判断子字符串或字符在父字符串中出现的位置字符串替换统计字符串出现次数重复字符串修改字符串大小写修剪字符串分割字符串拼接 slice 到字符串 strconv 本篇主要总结的是go中的string包的一些函数的操作讲解 string 在各个语言中&#x…...

uniapp,获取头部高度

头部自定义时候&#xff0c;设置获取安全区域&#xff0c;可以用 uni.getSystemInfoSync();接口。 <view class"statusBar" :style"{height:statusBarHeightpx}"> let SYSuni.getSystemInfoSync(); let statusBarHeightref(SYS.statusBarHeight) …...

开发面试题-更新中...

探迹科技&#xff08;腾讯面试官&#xff09; 1.了不了解循环屏障 2.对于java中的线程冲突有多少了解&#xff08;我要算1加到1亿&#xff09; 3.mysql调优怎么调&#xff08;我跟他讲了explain&#xff09; 4.type中ref&#xff0c;range,const的区别 5.我有1亿的数据量&…...

【Jmeter】jmeter指定jdk版本启动

背景&#xff1a; 因权限问题&#xff0c;不能修改操作系统的环境变量或者因jmeter启动加载的默认jdk8版本低&#xff0c;需要指定jdk XX版本启动Jmeter 解决办法&#xff1a; 进入jmeter bin目录选择jmeter.bat&#xff0c;记事本编辑jmeter.bat, 在最前面添加 set MINIMAL_…...

数据处理利器:图片识别转Excel表格让数据录入变简单

在现代职场中&#xff0c;手动录入数据是一个耗时且容易出错的过程。无论是纸质文件、照片还是截图&#xff0c;繁琐的输入常常让人感到头疼。如何高效地将这些信息转化为电子表格&#xff0c;是许多职场人士面临的挑战。 为了解决这一问题&#xff0c;我们推出了图片识别转Exc…...

【WPF】中Binding的应用

在 WPF (Windows Presentation Foundation) 中&#xff0c;数据绑定是一种强大的机制&#xff0c;它允许你将用户界面&#xff08;UI&#xff09;元素的属性与各种数据源关联起来。这种关联可以是单向的、双向的或一次性的。WPF 的数据绑定支持多种数据源&#xff0c;包括普通对…...

华为OD机试2024年真题(基站维修工程师)

基站维修工程师&#xff08;200分&#xff09; 小王是一名基站维护工程师&#xff0c;负责某区域的基站维护。 某地方有n个基站(1<n<10)&#xff0c;已知各基站之间的距离s(0<s<500)&#xff0c;并且基站x到基站y的距离&#xff0c;与基站y到基站x的距离并不一定会…...

在MySQL中为啥引入批量键访问(Batch Key Access, BKA)

批量键访问&#xff08;Batch Key Access, BKA&#xff09; 是 MySQL 在某些情况下用于优化 JOIN 操作的一种技术&#xff0c;特别是在通过索引进行 JOIN 时&#xff0c;它能有效减少查询的随机 I/O。批量键访问优化通过将一批主键或索引键一次性发送给存储引擎来查找匹配的行&…...

912.排序数组(归并排序)

目录 题目解法初始数组1. 分解阶段2. 合并阶段结果 为什么要创建长整型ll mid l ((r - l) >> 1);其中的>>是什么意思 题目 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题&#xff0c;时间复杂度为 O…...

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序

原理&#xff1a; 在 x86 系统里使用交叉编译工具链&#xff08;arm 版 gcc/g&#xff09;编译程序&#xff0c;然后放在 arm 系统里运行。 arm 版本 使用 lscpu 查看 cpu 架构 版本说明armv732 bitarmv8/arrch6464 bit 安装交叉编译工具链 # 针对 armv7 sudo apt install…...

软考(网工)——网络规划设计

文章目录 &#x1f550;综合布线1️⃣结构化布线系统2️⃣综合布线六大子系统3️⃣综合布线物理结构图 &#x1f551;网络分析与设计1️⃣网络规划设计模型2️⃣网络流量分析3️⃣网络安全技术措施表4️⃣技术评价 &#x1f552;网络结构与功能1️⃣局域网结构类型2️⃣三层架构…...

即插即用特征融合模块,即用即涨点!

特征融合&#xff08;Feature Fusion&#xff09;是深度学习中的一种重要技术&#xff0c;它可以帮助模型更好地理解数据的内在结构和规律&#xff0c;提高模型的性能和泛化能力。 另外&#xff0c;特征融合还可以提高模型的分类准确率&#xff0c;减少过拟合风险&#xff0c;…...

蓝桥算法双周赛 第 19 场 小白入门赛

打开石门 只要有相连的一样字母就可以消成一个 string s; int ans;void solve() {cin >> s;int len 0;for (int i 0;i < s.size();i ){if (s[i] L) len ;else //遇到Q{ans (len ? 1 : 0); //消除累计的Llen 0;ans ;//遇到Q}}//QLLLL时,最后遇不到Q让累计的L消…...

保姆级教程:在RK3568开发板上配置RK809-5 PMIC的Android设备树(附完整代码)

RK3568开发板实战&#xff1a;RK809-5 PMIC设备树配置全流程解析 当你在RK3568开发板上第一次按下电源键&#xff0c;却只看到一片黑屏时&#xff0c;作为嵌入式工程师的直觉会告诉你&#xff1a;PMIC配置出了问题。RK809-5这颗电源管理芯片就像系统的"心脏"&#xf…...

故障发现滞后、处置不及时引发的业务中断与数据风险,超自动化巡检帮您解决

在数字化业务高度依赖IT系统的今天&#xff0c;每一次故障发现滞后、每一次处置不及时&#xff0c;都可能引发连锁反应——从关键业务中断到核心数据泄露&#xff0c;损失往往远超预期。传统运维模式在应对现代复杂系统时已显疲态&#xff0c;而超自动化巡检正成为破解这一困局…...

Java高频面试题:RocketMQ有哪些使用场景?

大家好&#xff0c;我是锋哥。今天分享关于【Java高频面试题&#xff1a;RocketMQ有哪些使用场景&#xff1f;】面试题 。希望对大家有帮助&#xff1b;Java高频面试题&#xff1a;RocketMQ有哪些使用场景&#xff1f;RocketMQ 是阿里巴巴开源的一款分布式消息中间件&#xff0…...

自然语言处理助力法律领域AI架构,提升司法服务质量

自然语言处理助力法律领域AI架构:从技术落地到司法服务升级的全链路实践 1. 引言:法律行业的“效率痛点”与NLP的破局之路 1.1 痛点引入:当法律遇到“信息过载”与“专业门槛” 深夜十点的律师办公室里,张律师还在揉着太阳穴核对第三份合同的条款——密密麻麻的法条引用…...

魔兽世界游戏插件开发从入门到实战:工具详解与效率提升指南

魔兽世界游戏插件开发从入门到实战&#xff1a;工具详解与效率提升指南 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api 作为魔兽世界玩家&#xff0c;你是否曾想过通过自定义插件提…...

Kook Zimage真实幻想Turbo部署教程:OpenStack私有云中幻想图生成服务弹性伸缩方案

Kook Zimage真实幻想Turbo部署教程&#xff1a;OpenStack私有云中幻想图生成服务弹性伸缩方案 1. 项目概述 Kook Zimage真实幻想Turbo是一款专为个人GPU环境优化的幻想风格文生图系统。基于Z-Image-Turbo极速推理架构&#xff0c;通过深度整合专属幻想模型权重&#xff0c;实…...

【adb端口5555】烽火hg680系列安卓9线刷全攻略:告别强制升级与花屏困扰

1. 烽火HG680系列机顶盒的痛点与解决方案 最近在折腾烽火HG680-GY和HG680-GC这两款机顶盒的朋友应该都深有体会&#xff0c;官方系统用着用着就会弹出强制升级提示&#xff0c;有时候还会莫名其妙出现花屏问题。作为一个折腾过不下20台烽火盒子的老玩家&#xff0c;我太理解这种…...

模型timm/ViT-B-16-SigLIP简要介绍及其应用场景

目录一、timm/ViT-B-16-SigLIP 是什么模型二、模型结构&#xff08;核心架构&#xff09;1️⃣ 图像编码器2️⃣ 文本编码器3️⃣ 对齐训练三、为什么叫 ViT-B-16四、在 timm 中如何使用五、典型应用场景1️⃣ Zero-shot 图像分类2️⃣ 图文检索&#xff08;Image-Text Retriev…...

B2B品牌战略方法拆解:客户层、业务层、价值层、证据层怎么串起来

一个有点反常识的判断是&#xff1a;真正拉开差距的&#xff0c;常常不是你有多少材料、多少动作、多少名字&#xff0c;而是你能不能先把最关键的判断结构做出来。B2B品牌战略一旦结构对了&#xff0c;后面的内容、渠道和场景才会越做越顺。B2B品牌战略是什么&#xff1a;围绕…...

douyin-downloader:智能化解构无水印视频批量采集的技术方案

douyin-downloader&#xff1a;智能化解构无水印视频批量采集的技术方案 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容爆炸的时代&#xff0c;如何高效获取高质量视频素材成为内容创作者、研究者…...