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.rhkb.cn/news/106362.html

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

相关文章

顺序表之初

欢迎来到我的&#xff1a;世界 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 线性表简介顺序表定义动态顺序表的初始化尾插头插Cheak 判断是否增容尾删&#xff1a;头删&#xff1a;打印在pos位置前插入x删除pos位置的值查…

Python学习笔记_实战篇(二)_django多条件筛选搜索

多条件搜索在很多网站上都有用到&#xff0c;比如京东&#xff0c;淘宝&#xff0c;51cto&#xff0c;等等好多购物教育网站上都有&#xff0c;当然网上也有很多开源的比楼主写的好的多了去了&#xff0c;仅供参考&#xff0c;哈哈 先来一张效果图吧&#xff0c;不然幻想不出来…

浅谈小程序开源业务架构建设之路

一、业务介绍 1.1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态&#xff0c;我们的愿景是&#xff1a;定义移动时代最佳体验&#xff0c;建设智能小程序行业标准&#xff0c;打破孤岛&#xff0c;共建开源、开放、繁荣的小程序行业生态。百度智…

电子电路学习笔记之SA1117BH-1.2TR——LDO低压差线性稳压器

关于LDO调节器&#xff08;Low Dropout Regulator&#xff09;是一种电压稳压器件&#xff0c;常用于电子设备中&#xff0c;用于将高电压转换为稳定的低电压。它能够在输入电压和输出电压之间产生较小的差异电压&#xff0c;因此被称为"低压差稳压器"。 LDO调节器通…

设计模式之职责链模式(ChainOfResponsibility)的C++实现

1、职责链模式的提出 在软件开发过程中&#xff0c;发送者经常发送一个数据请求给特定的接收者对象&#xff0c;让其对请求数据进行处理&#xff08;一个数据请求只能有一个对象对其处理&#xff09;。如果发送的每个数据请求指定特定的接收者&#xff0c; 将带来发送者与接收…

【LeetCode】1448.统计二叉树中好节点的数目

题目 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 …

【MOS管的作用和工作原理】

数电/模电知识学习与分享001 MOS管的作用和工作原理1、MOS管基本概念2、MOS管基本原理3、MOS管广泛作用4、MOS管特点4、参考文献 MOS管的作用和工作原理 1、MOS管基本概念 MOS管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;是一种常用的半导体…

python AI绘图教程

前提 1.安装python 2.安装git 步骤 下载stable-diffusion-webui项目&#xff08;链接&#xff1a;GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI&#xff09; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 安装st…

【Go Web 篇】Go 语言进行 Web 开发:构建高性能网络应用

随着互联网的快速发展&#xff0c;Web 开发已经成为了软件开发领域中不可或缺的一部分。随之而来的是对于更高性能、更高效的网络应用的需求。在这个领域&#xff0c;Go 语言因其并发性能、简洁的语法以及丰富的标准库而备受关注。本篇博客将深入探讨如何使用 Go 语言进行 Web …

centos7设置静态IP地址

安装完成系统后&#xff0c;接下来就是配置静态IP地址&#xff0c;如下&#xff1a; 进入编辑模式vim /etc/sysconfig/network-scripts/ifcfg-ens33 文件名不一定是ifcfg-ens33&#xff0c;到/etc/sysconfig/network-scripts下面找下是哪个文件 修改 &#xff1a; BOOTPROTO…

Python OCR 使用easyocr库将图片中的文章提取出来

Python OCR 使用easyocr库将图片中的文章提取出来 初环境内容步骤一&#xff1a;安装easyocr库步骤二&#xff1a;导入必要的库步骤三&#xff1a;创建OCR阅读器对象步骤四&#xff1a;指定要识别的图片路径步骤五&#xff1a;执行OCR识别并提取文章内容步骤六&#xff1a;遍历…

深入分析负载均衡情景

本文出现的内核代码来自Linux5.4.28&#xff0c;为了减少篇幅&#xff0c;我们尽量不引用代码&#xff0c;如果有兴趣&#xff0c;读者可以配合代码阅读本文。 一、有几种负载均衡的方式&#xff1f; 整个Linux的负载均衡器有下面的几个类型&#xff1a; 实际上内核的负载均衡…

【TI毫米波雷达笔记】UART串口外设配置及驱动(以IWR6843AOP为例)

【TI毫米波雷达笔记】UART串口外设初始化配置及驱动&#xff08;以IWR6843AOP为例&#xff09; 最基本的工程建立好以后 需要给SOC进行初始化配置 int main (void) {//刷一下内存memset ((void *)L3_RAM_Buf, 0, sizeof(L3_RAM_Buf));int32_t errCode; //存放SOC初…

同态比较算法

参考文献&#xff1a; [PS73] Paterson M S, Stockmeyer L J. On the number of nonscalar multiplications necessary to evaluate polynomials[J]. SIAM Journal on Computing, 1973, 2(1): 60-66.[IZ21] Iliashenko I, Zucca V. Faster homomorphic comparison operations …

redis7高级篇3 数据量亿级别的统计分析(hyperloglog,bitmap,geo)

一 亿级别统计分类 1.1 统计分类 1.聚合统计&#xff1a;统计多个集合聚合的结果&#xff0c;也就是多个集合之间交并差的统计。 2.排序统计&#xff1a;在需要展示最新列表&#xff0c;排行榜等场景时&#xff0c;如果数据更新频繁或者需要分页时&#xff0c;建议使用zset12…

滚珠螺杆导程对精度有影响吗?

滚珠螺杆的导程也称螺距&#xff0c;即螺杆每旋转一周螺母直线运动的距离&#xff0c;导程与直线速度有关&#xff0c;在输入转速一定的情况下&#xff0c;导程越大速度越快。正常来说&#xff0c;选择导程时&#xff0c;尽量选5和10最好。 很多人一直觉得导程会影响滚珠螺杆的…

【安卓】自定义View实现画板涂鸦等功能

一、实现效果 二、代码 1、MainActivity.class package com.lsl.mydrawingboarddemo;import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat;import android.os.Bundle; import android.os.Handler; import android.view.View; impo…

73 # 发布自己的 http-server 到 npm

1、添加 .npmignore 文件&#xff0c;忽略不需要的文件 public2、去官网https://www.npmjs.com/检查自己的包名是否被占用 3、切换到官方源&#xff0c;然后检查确认 nrm use npm nrm ls4、登录 npm 账号 npm login5、发布 npm publish6、查看发布情况&#xff0c;发布成功…

npm 卸载 vuecli后还是存在

运行了npm uninstall vue-cli -g&#xff0c;之后是up to date in&#xff0c;然后vue -V&#xff0c;版本号一直都在&#xff0c;说明没有卸载掉 1、执行全局卸载命令 npm uninstall vue-cli -g 2、删除vue原始文件 查看文件位置&#xff0c;找到文件删掉 where vue 3、再…

山西电力市场日前价格预测【2023-08-27】

日前价格预测 预测明日&#xff08;2023-08-27&#xff09;山西电力市场全天平均日前电价为318.11元/MWh。其中&#xff0c;最高日前电价为356.66元/MWh&#xff0c;预计出现在19: 15。最低日前电价为273.48元/MWh&#xff0c;预计出现在04: 30。 价差方向预测 1&#xff1a; 实…