Vue组件之间的通信(二)

news2024/12/28 5:27:22

一、兄弟组件之间的通信

(1)使用Vue的状态管理器Vue:建议在大型项目中使用

(2)使用第三方的模块:mitt(中央数据总线方式),创建一个事件中心,由它来进行事件的监听、触发,在这个过程中实现任意组件之间的通信

        1️⃣安装

                npm install mitt

        2️⃣创建事件中心

// 导入mitt
import mitt from 'mitt'
// 创建事件触发器
const emitter = mitt();
// 导出事件触发器
export default emitter;

        3️⃣创建组件,在组件中使用事件触发器,触发事件的同时发送数据

        4️⃣接收数据

        注:A组件和B组件是兄弟组件

(1)on('事件名',callback):事件的监听,一旦监听的事件被触发,说明兄弟组件在传递数据,callback用来接收数据

(2)emit('事件名',data):事件触发

        A组件监听的事件名必须与B组件触发的事件名相同

Brother1:

<template>
  <div class="brother1">
    <h2>兄弟 ———— 孙悟空</h2>
    <p>{{ data1 }} &nbsp;&nbsp;&nbsp;&nbsp;{{ data2 }}</p>
    <button @click="sendData">给你一棒子</button>
  </div>
</template>

<script>
import emitter from "@/event-center/event";

export default {
  name: "Brother1",
  data() {
    return {
      data1:'金箍棒',   //本组件的数据
      data2:''         //兄弟组件传递的数据
    }
  },
  methods:{
    sendData(){  //向兄弟组件发送数据,需要使用事件中心的触发器触发事件
        emitter.emit('one-to-two',this.data1)
    },
    receive(){
      emitter.on('two-to-one',(e)=>{
        this.data2 = e;
      })
    }
  },
  mounted() {   //钩子函数:当组件挂载时,接收数据
    this.receive();
  }
}
</script>

<style scoped>
  .brother1{
    color: mediumpurple;
    font-size: 20px;
    border: 1px solid #bbb ;
    margin-bottom: 10px;
  }
</style>

Brother2:

<template>
  <div class="brother2">
    <h2>兄弟 ———— 猪八戒</h2>
    <p>{{ data1 }} &nbsp;&nbsp;&nbsp;&nbsp;{{ data2 }}</p>
    <button @click="sendData">给你一朵花</button>
  </div>
</template>

<script>
import emitter from "@/event-center/event";

export default {
  name: "Brother1",
  data() {
    return {
      data1:'玫瑰花',
      data2:''
    }
  },
  methods:{
    sendData(){
      emitter.emit('two-to-one',this.data1)
    },
    //接收数据
    receive(){
      emitter.on('one-to-two',(e)=>{  //第1个参数:监听的事件名,第2个参数:回调函数用来接收兄弟组件传递的数据
        this.data2 = e;
      })
    }
  },
  mounted() {   //钩子函数:当组件挂载时,接收数据
    this.receive();
  }
}
</script>

<style scoped>
.brother2{
  color: deepskyblue;
  font-size: 20px;
  border: 1px solid #bbb ;
  margin-bottom: 10px;
}
</style>

 

二、跨级组件之间的通信

        provide/inject 类似于消息的订阅发布。provide提供或发送数据,inject接收数据。

(1)provide(name,value):函数接收2个参数

                name:定义提供property的name

                value:property的值

(2)inject(name,default):函数有2个参数

            name:接收provide提供的属性名

            default:设置默认值,可以不写,是可选参数

QianLong:

<template>
  <div>
    <h2>孙子:乾隆</h2>
    <div>爷爷:{{ getYeData }}</div>
  </div>
</template>

<script>
//导入inject函数:用来接收数据 
import {inject} from "vue";

export default {
  name: "QianLong",
  data(){
    return {
      getYeData:inject('LastWords')
    }
  }
}
</script>

<style scoped>

</style>

YongZheng:

<template>
  <div>
    <h2>儿子:雍正</h2>
    <div>父亲:{{ getFatherData }}</div>
  </div>
  <hr>
  <QianLong/>
</template>

<script>
import {inject} from "vue";
import QianLong from "@/components/QianLong";
export default {
  name: "YongZheng",
  data(){
    return {
      getFatherData:inject('LastWords')
    }
  },
  components:{
    QianLong
  }
}
</script>

<style scoped>

</style>

KangXi:

<template>
  <div>
    <h2>康熙:{{ lastWords }}</h2>
  </div>
  <hr>
  <YongZheng/>
</template>

<script>
import {provide} from "vue";
import YongZheng from "@/components/YongZheng";
export default {
  name: "KangXi",
  data(){
    return {
      lastWords:'整顿吏治'
    }
  },
  components:{
    YongZheng
  },
  created() {  //钩子函数,在组件创建时触发
    provide('LastWords',this.lastWords);
  }
}
</script>

<style scoped>

</style>

 

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

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

相关文章

第一章算法简介

二分查找引入大O表示法 仅知道算法需要多长时间运行完毕还不够&#xff0c;还需要知道运行时间如何随列表长度增加而增加&#xff0c;这正是大O表示法的用武之地。 大O表示法 大O表示法指出了算法有多块&#xff0c;之所以称作大O&#xff0c;单纯因为前面有个O(funny!)大O表…

Allegro174版本新功能介绍之导入导出菜单栏设置

Allegro174版本新功能介绍之导入导出菜单栏设置 Allegro174版本除了支持锁定菜单栏设置之外,同样还支持导出和导入菜单栏的设置 具体操作如下 首先设置并且排列好菜单栏,类似下图选

基于链表的通信录管理

意义&#xff1a;对于一个通信录来说&#xff0c;要管理联系人的信息&#xff0c;包括编号&#xff0c;姓名&#xff0c;性别&#xff0c;电话。开发其系统主要为了帮助用户提高通讯录有管理效率&#xff0c;节约资源&#xff0c;提高信息的精确度模块&#xff1a;一级菜单内容…

【Go基础】数据类型

文章目录1. 数据类型1.1 基本数据类型1.2 复合数据类型1.3 自定义数据类型2. 数组3. 切片4. 字符串5. 数据类型转换6. Map7. Channel1. 数据类型 1.1 基本数据类型 类型长度(字节)默认值说明bool1falsebyte10uint8&#xff0c;取值范围[0,255]rune40Unicode Code Point, int3…

电脑解压文件丢失怎么找回来?四种恢复方法

您在使用电脑过程中&#xff0c;有没有解压过文件呢&#xff1f;如果有的话&#xff0c;是否出现过解压文件丢失的情况呢&#xff1f;解压文件通俗易懂地讲就是把压缩好了的文件解开。而有些小伙伴在解压文件以后发现丢失了&#xff0c;这些丢失的文件或许是您重要的img解压文件…

数学建模学习笔记-算法(求解整数规划-2.割平面算法)

基本思想 松弛问题无解&#xff0c;则整数规划无解 松弛问题的最优解是整数解&#xff0c;则他也是整数规划的最优解 如果松弛问题的解是非整数解&#xff0c;则对其增加割平面条件。 割平面条件&#xff1a;增加一个线性条件&#xff0c;通过不等式将可行区域割掉一部分&a…

如何使用ebpf统计某个端口的流量

前言 上篇文章我们已经初步使用kprobe来探测内核函数了, 这篇文章就在上篇文章的基础上做个修改, 通过kprobe探测内核函数tcp_sendmsg来统计tcp服务端的发送流量. 废话不多说, 直接上正文. 环境 tcp服务端运行在ubuntu22, 监听端口为6230, 其内核为5.19.0-26-generic, ebpf程序…

LSA、pLSA、LDA、NMF、BERTopic、Top2Vec进行主题建模

在自然语言处理(NLP)中,主题建模是一种技术,用于从文本数据中发现隐藏的语义主题(或主题)。这是一个无监督机器学习问题,即在没有标签或标签的情况下学习模式。主题建模的应用非常广泛,可用于搜索引擎、情感分析、新闻聚类和摘要生成等许多任务。 在这里将探讨主题建模…

一屏统管 智慧交管Web3D可视化大屏云控系统

交通是城市发展的基础&#xff0c;体现着社会文明程度&#xff0c;彰显着城市治理水平。今天给大家分享一个基于 数维图 的 Sovit3D编辑器 构建轻量化 3D 可视化场景的案例——智慧交管三维可视化系统。多维度呈现城市交通情况&#xff0c;赋能“安全管控、缓堵保畅、出行服务”…

硬件系统工程师宝典(2)-----硬件电路的概要设计启动

今天我们继续来读这本书&#xff0c;硬件系统工程师宝典。作者提到&#xff0c;产品需求分析之后就进入概要设计阶段。在这个阶段&#xff0c;ID&#xff08;Industrial Design&#xff09;工业设计及结构工程师、软件系统开发工程师和硬件系统开发工程师等开始分头工作。 工业…

头条百科词条怎么编辑?送你一份超详细指南

头条百科其实就是之前的互动百科&#xff0c;后面被今日头条收购之后&#xff0c;改为头条百科&#xff0c;也叫快懂百科。 百度百科在百度上的权重很高&#xff0c;而头条百科在今日头条和抖音上的权重很高。 现在我们遇到什么问题或是不知道什么人物、品牌的时候&#xff0…

xxljob 的 阻塞处理策略的逻辑是什么(小白)

目录 1 需求2 单机串行3 丢弃后续调整4 覆盖之前的调整1 需求 每一个任务都有一个阻塞处理策略,我们在创建任务的时候可以自己设置,那么不同的设置,后端的逻辑是什么呢》 xxljob 调度中心项目 调度我们自己的项目,到了我们项目里面,最先到的文件是 就在首次到的这个文件的…

Springboot-数据库操作(Mybatis)-初级入门

一、Mybatis-plus介绍 官方文档&#xff1a;简介 | MyBatis-Plus (baomidou.com) 他只增强了单表查询&#xff0c;没增强多表查询等复杂的查询。 二、配置 引入依赖 <!-- MyBatisPlus依赖--><dependency><groupId>com.baomidou</groupId><a…

UBUNTU 22.04 使用 SUNSHINE 和 MOONLIGHT 进行串流

参考 【ubuntu22.04】sunshine安装使用总结&#xff0c;远程游戏。_哔哩哔哩_bilibili sunshine/README.md at master loki-47-6F-64/sunshine GitHub GitHub - LizardByte/Sunshine: Sunshine is a Gamestream host for Moonlight. Installation - Sunshine documentati…

基于Java+SpringBoot+vue实现图书借阅和销售商城一体化系统

基于JavaSpringBootvue实现图书借阅和销售商城一体化系统 &#x1f680; 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 &#x1f345; 作者主页 超级帅帅吴 &#x1f345; 欢迎点赞 &#x1f…

2023年江苏专转本志愿填报辅导(22上岸南工程学长辅导手册)

文章目录公告链接一、23年专转本与22年的变化二、专转本志愿填报2.1、填报流程2.2、志愿填报院校顺序选择参考三、专转本考试分值及时间节点四、专转本录取投档原则及办法&#xff08;平行、征求平行志愿、服从志愿、降分录取&#xff09;五、考前冲刺辅导不同大类填报计算机大…

面试官问我TCP三次握手和四次挥手,我真的是

候选者&#xff1a;面试官你好&#xff0c;请问面试可以开始了吗 面试官&#xff1a;嗯&#xff0c;开始吧 面试官&#xff1a;今天来聊聊TCP吧&#xff0c;TCP的各个状态还有印象吗&#xff1f; 候选者&#xff1a;还有些许印象的&#xff0c;要不我就来简单说下TCP的三次握…

【Kotlin】函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )

文章目录一、匿名函数变量类型推断二、匿名函数参数类型自动推断三、Lambda 表达式一、匿名函数变量类型推断 定义变量 时 , 如果将变量值 直接赋值给该变量 , 那么就可以 不用显示声明该变量的类型 ; 下面的代码中 , 定义 name 变量 , 为其 赋值 “Tom” 字符串 String 类型变…

2023年山东食品安全管理员模拟试题及答案

百分百题库提供食品安全管理员考试试题、食品安全管理员考试预测题、食品安全管理员考试真题、食品安全管理员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、单选题 1.餐饮具消毒的目的是: A.去除表面的污垢 B.杀灭…

【个人博客】Hexo个人博客搭建与配置详细教程 + Fluid主题 + Gitee发布

文章目录一、环境准备1.1 安装 NodeJs1.2 安装 Git1.3 安装 Hexo二、Gitee仓库搭建2.1 Gitee账号注册2.2 仓库搭建三、Hexo博客搭建3.1 基础环境搭建3.2 启动 Hexo3.3 更换 Fluid 主题四、自定义配置4.1 全局设置4.1.1 页面顶部大图4.1.2 博客标题4.1.3 导航菜单4.1.4 懒加载4.…