vue3 基础知识 (组件之间的通信 and vuex) 02

侬好哇 !😍

文章目录

  • 一、组件的通信 (父传子)
  • 二、非 Prop 的Attribute (属性)
  • 三、组件的通信 (子传父)
  • 四、非父子组件的相互通信(Provide/Inject)
  • 五、非父子组件的相互通信(vuex)


一、组件的通信 (父传子)

        在开发过程中,我们会经常遇到需要组件之间相互进行通信,比如App可能使用了多个Header,每个地方的Header展示的内容不同,那么我们就需要使用者传递给Header一些数据,让其进行展示;又比如我们在Main中一次性请求了Banner数据和ProductList数据,那么就需要传递给他们来进行展示;也可能是子组件中发生了事件,需要有父组件来完成某些操作,那就需要子组件向父组件传递事件;总之,在一个Vue项目中,组件之间的通信是非常重要的环节

父组件传递给子组件:

  1. Props是你可以在组件上注册一些自定义的 attribute (属性)
  2. 父组件给这些 attribute 赋值 ,子组件通过 attribute 的名称获取到对应的值
父组件<template><div><show-message title="哈哈哈" content="我是哈哈哈"></show-message><show-message title="呵呵呵" content="我是呵呵呵"></show-message></div>
</template><script>import ShowMessage from './ShowMessage.vue';export default {components: {ShowMessage}}
</script>

<template><div><h2>组件展示的title:{{title}}</h2><p>组件展示的content: {{content}}</p></div>
</template>//子组件接收一个props 为一个数组
<script>export default {props: ["title", "content"]}
</script>//子组件接收一个props 为一个对象,做一些限制
<script>export default {props: {// 指定类型title: String,   // 指定类型,同时指定是否必选、默认值    content: {    type: String,      require: true,       default: "哈哈哈"   } }}
</script>

type的类型都可以是哪些呢?

  • String ,Number ,Boolean ,Array ,Object ,Date,Function ,Symbol

对象或数组默认值必须从一个工厂函数获取

  • 因为复杂类型数据值是互相引用的,所以这时需要从工厂函数获取

二、非 Prop 的Attribute (属性)

  • 当我们传递给一个组件某个属性,但是该属性并没有定义对应的props或者emits时,就称之为 非Prop的Attribute;
  • 常见的包括class、style、id属性等

当组件有单个根节点时,非Prop的Attribute将自动添加到根节点的Attribute中:

请添加图片描述

禁用Attribute继承:

  1. 如果我们不希望组件的根元素继承attribute,可以在组件中设置 inheritAttrs: false:

  2. 禁用attribute继承的常见情况是需要将attribute应用于根元素之外的其他元素;

  3. 我们可以通过 $attrs来访问所有的 非props的attribute;

请添加图片描述

多个根节点的attribute:

  • 多个根节点的attribute如果没有显示的绑定,那么会报警告,我们必须手动的指定要绑定到哪一个属性上
  • 具体指定在哪里就好啦!

三、组件的通信 (子传父)

  1. 首先,我们需要在子组件中定义好在某些情况下触发的事件名称;
  2. 其次,在父组件中以v-on的方式传入要监听的事件名称,并且绑定到对应的方法中;
  3. 最后,在子组件中发生某个事件的时候,根据事件名称触发对应的事件;
子组件<template>  <div>  <button @click="increment">+1</button>    <button @click="decrement">-1</button>  <button @click="incrementn">+n</button>  </div>
</template>
<script>
export default {emits: ["addOne", "subOne","andn"],  // 监听两个事件// 对象写法一般是用来做参数验证// emits: {//	addOne:null,//	subOne:null,//	andn:n=>{//	console.log(n)//	}// } methods: {increment() {this.$emit("addOne");   // this.$emit的方式发出去事件},decrement() {this.$emit("subOne");}incrementn(n) {this.$emit("addn",n);   //接收参数},}
};
</script>
父组件<template>  <div>    <h2>当前计数: {{counter}}</h2>    <counter-operation @addOne="add" @subOne="sub" @incrementn="addn(5)"></counter-operation>  </div>
</template>
<script>
import CounterOperation from "./CounterOperation.vue";
export default {components: { CounterOperation },data() {return { counter: 0 ,n:0};},methods: {add() {this.counter++;},sub() {this.counter--;},addn(n) {this.counter += n    //传递参数}}
};
</script>

四、非父子组件的相互通信(Provide/Inject)

  • Provide/Inject 用于非父子组件之间共享数据

比如有一些深度嵌套的组件,子组件想要获取父组件的部分内容,在这种情况下,如果我们仍然将 props 沿着组件链逐级传递下去,就会非常的麻烦,对于这种情况下,我们可以使用 Provide 和 Inject : 无论层级结构有多深,父组件都可以作为其所有子组件的依赖提供者

  1. 父组件有一个 provide 选项来提供数据;
  2. 子组件有一个 inject 选项来开始使用这些数据;

基本使用:


在这里插入图片描述

// 父组件data属性同级 写provide属性,下发数据provide:{name:'ha',age:3},
//下级组件 直接使用
<h1>{{name}}</h1>// 下级组件 data属性同级 ,写inject,接收inject:['name','age'],

补充:


//在真实开发中,我们的数据肯定来自于服务器,当我们传递的数据是data里的数据时
//发现报错,是因为这时的this指向script函数,vue的this指向undifinedprovide:{name:this.name},//改为函数形式,应该是vue 内部帮助我们修改了this指向provide() {return { name:this.name};},
// 当父组件值发生改变时,下级组件可以通过监听的方式进行改变provide() {return { name:computed(()=>{this.name})};

五、非父子组件的相互通信(vuex)

待补充

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

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

相关文章

神经网络基础-神经网络补充概念-59-padding

概念 在深度学习中&#xff0c;“padding”&#xff08;填充&#xff09;通常是指在卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNNs&#xff09;等神经网络层中&#xff0c;在输入数据的周围添加额外的元素&#xff08;通常是零&#xff09;&#xf…

高教杯数学建模2020C题总结

&#x1f9e1;1. 前言&#x1f9e1; 跟队友花了三天模拟2020C题&#xff0c;现在整理一下一些数据处理的代码&#xff0c;以及在模拟中没有解决的问题。方便以后回溯笔记。 &#x1f9e1;2. 数据处理&#x1f9e1; 2.1 导入数据&#xff0c;并做相关预处理 import pandas a…

更改计算机睡眠时间

控制面板–>系统和安全–>电源选项下的更改计算机睡眠时间 如果关闭显示器时间小于使计算机进入睡眠状态时间&#xff0c;时间先到达关闭显示器时间&#xff0c;显示器关闭&#xff0c;这时电脑还在正常工作状态。如果此时敲击键盘显示器出现画面&#xff0c;无需输入密…

算法|Day46 动态规划14

LeetCode 1143- 最长公共子序列 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述&#xff1a;给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff…

AndroidUI体系

见&#xff1a;GitHub - eHackyd/Android_UI: Android UI体系的学习笔记

【云原生】3分钟快速在Kubernetes1.25部署Prometheus2.42+Grafana9.5.1+Alertmanager0.25

文章目录 1、简介2、GitHub地址3、环境信息4、安装5、访问Grafana1、简介 Prometheus-operator帮助我们快速创建Prometheus+Grafana+Alertmanager等服务,而kube-prometheus更加完整的帮助我们搭建全套监控体系,这包括部署多个 Prometheus 和 Alertmanager 实例, 指标导出器…

【C/C++】实现模板类数据结构 -- 栈 (亲测可用)

/* * * 模板类&#xff1a; 栈结构[借助数组实现] */ template<typename T> class Stack { private:T *data; /* 数组第一个元素地址&#xff0c;存放T类型数组元素 */int size; /* 当前栈实际填充数量 */int capacity; /* 最大装载量 */ public:Stack(int m_capacity) :…

Php“牵手”淘宝商品SKU信息数据采集方法,淘宝API接口申请指南

淘宝天猫商品属性sku信息接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取商品的详细信息&#xff0c;包括商品的标题、描述、图片&#xff0c;销量&#xff0c;sku信息等信息。在电商平台的开发中&#xff0c;商品属性接口API是非常常用的 API&#x…

消息中间件篇

消息中间件篇 RabbitMQ 如何保证消息不丢失 面试官&#xff1a; RabbitMQ如何保证消息不丢失 候选人&#xff1a; 嗯&#xff01;我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的&#xff0c;这里面就要求了消息的高可用性&#xff0c;我们要保证消息的不…

管理外部表

官方文档地址&#xff1a;Managing Tables 关于外部表 Oracle 数据库允许您对外部表中的数据进行只读访问。外部表定义为不驻留在数据库中的表&#xff0c;通过向数据库提供描述外部表的元数据&#xff0c;数据库能够公开外部表中的数据&#xff0c;就好像它是驻留在常规数据…

Lnton羚通算法算力云平台【PyTorch】教程:torch.nn.Softsign

torch.nn.Softsign 原型 CLASS torch.nn.Softsign() 图 代码 import torch import torch.nn as nnm nn.Softsign() input torch.randn(4) output m(input)print("input: ", input) print("output: ", output)# input: tensor([ 0.0046, -0.4135, -2…

智慧健康杂志智慧健康杂志社智慧健康编辑部2023年第15期目录

智慧医疗 医疗信息化 提高病案首页填写质量&#xff0c;体现病案信息利用价值 张明芳; 1-4 经支气管镜检查联合针吸活检术在肺癌诊断中的临床应用价值 邱洪亮; 5-8 高频超声对距腓前韧带损伤的诊断价值 梁劲松;叶绮婷;曹肖维; 9-12《智慧健康》投稿邮箱&#xff1a…

学习笔记 --- RabbitMQ

简介 RabbitMQ是一款开源的消息队列中间件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准。作为一个消息代理&#xff0c;RabbitMQ可以在应用程序之间可靠地传递和存储消息&#xff0c;并支持多种消息传递模式。 基本概念和特性 消息&#xff1a;在R…

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU-Attention多特征分类预测&#xff0c;多特征输入模型&…

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

目录 1、摘要 2、Method 2.1 模拟异常样本 2.2 Memory Module 2.3 空间注意模块 2.4 多尺度特征融合模块 2.5 损失函数设置 2.6 Decoder模块 1、摘要 本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力&#xff0c;从而更好地区分非正常图像。如…

分布式核心知识以及常见微服务框架

分布式中的远程调用 在微服务架构中&#xff0c;通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分&#xff1a;序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等&#xff0c;目前主流的远程调用技术有基于HTTP…

【运筹优化】贪心启发式算法和蜘蛛猴优化算法求解连续选址问题 + Java代码实现

文章目录 一、问题描述二、思路分析三、解决方案3.1 贪心启发式算法3.2 群体智能算法&#xff08;蜘蛛猴优化算法&#xff09; 四、总结 一、问题描述 选址问题是指在规划区域里选择一个或多个设施的位置&#xff0c;使得目标最优。 按照规划区域的结构划分&#xff0c;可以将…

spring异步框架使用教程

背景 在需求开发过程中&#xff0c;为了提升效率&#xff0c;很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作&#xff0c;这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长…

系统架构设计师-信息安全技术(2)

目录 一、安全架构概述 1、信息安全所面临的威胁 二、安全模型 1、安全模型的分类 2、BLP模型 3、Biba 模型 4、Chinese Wall模型 三、信息安全整体架构设计 1、WPDRRC模型 2、各模型的安全防范功能 四、网络安全体系架构设计 1、开放系统互联安全体系结构 2、安全服务与安…

万字长文带你快速了解整个Flutter开发流程

文章目录 背景1.简介与优势Flutter是什么&#xff1f;为什么选Flutter&#xff1f; 2.开发环境搭建安装Flutter SDK配置开发环境 3.创建项目项目结构概览&#xff1a; 4.UI 构建与布局什么是Widget&#xff1a;StatelessWidget和StatefulWidget&#xff1a;Widget的组合&#x…