vue进阶-消息的订阅与发布

📖vue基础学习-组件 介绍了嵌套组件间父子组件通过 props 属性进行传参。子组件传递数据给父组件通过 $emit() 返回自定义事件,父组件调用自定义事件接收子组件返回参数。

📖vue进阶-vue-route 介绍了路由组件传参,两种方式:params传参query 传参

本章介绍组件间通信:✨vue消息的订阅与发布

简介

  • 消息的订阅与发布(PubSub.js)适用于:任何组件间通信
  • PubSub 可以在 Vue 任意组件间进行传值,无需要进行中间层层传递。
  • 使用的模式是观察者模式:生产者抛出,消费者接收。

1. 入门

1.1 安装

npm i pubsub-js

1.2 引入 pubub

import pubsub from 'pubsub-js'

1.3 发布

pubsub.publish('消息名称', 发布的数据)

1.4 订阅

pubsub.subscribe('消息名称', 回调函数)
  • subscribe()方法会返回订阅消息对应的 ID。
  • 回调函数接收两个参数,第一个参数为消息名称,第二个参数为传递过来的数据
  • 回调函数,不建议使用普通匿名函数,因为第三方库和 vue 不一样,不保证函数中的 this 指向 vue 实例或组件实例对象。建议使用箭头函数或者 将普通函数写在 methods 配置项中。

第一种方式:

mounted() {
	this.pid = pubsub.subscribe('xxx', (msgName, data)=>{...})
}

第二种方式:

methods: {
	demo(msgName, data){...}
},
mounted() {
	this.pid = pubsub.subscribe('xxx', this.demo)
}

1.5 取消订阅

beforeDestroy() {
    pubsub.unsubscribe(this.pid)
}

beforeDestroy 钩子函数中,调用pubsub.unsubscribe取消订阅。

2. 示例

首先,我们先复习下嵌套组件间父子组件传值。

📌1、新增子组件 ComponentA

<template>
    This is ComponentA, title = {{title}}, userName = {{userName}}
</template>
<script>
export default {
    props: ['title','userName']
}
</script>

子组件通过 props: ['title','userName'] 显式声明它所接受的属性 titleuserName

📌2、新增父组件 FuComponent

<template>
    <component-a :title="title" :userName="userName"></component-a>
</template>

<script>
import ComponentA from '@/components/ComponentA.vue'

export default {
    components: { ComponentA },
    data() {
        return {
            title: 'google',
            userName: 'Jack'
        }
    }
}
</script>

父组件在 data 中动态赋值 title、userName 。

📌3、router/index.js配置路由

import { createRouter, createWebHistory } from "vue-router";

const routes = [
    {
        path: '/fuComponent',
        component: () => import("@/components/FuComponent.vue")
    }
]
const router = createRouter({
    history: createWebHistory(),
    routes
})
export default router

📌4、App.vue 中使用路由

<template>
  <router-link to="/fuComponent">父子组件参数传递</router-link><br />
  <hr />
  <router-view></router-view>
</template>
<script setup>
 
</script>

📌5、测试

在这里插入图片描述

3. 发布订阅模式改造

📌1、子组件 ComponentA 发布订阅

在这里插入图片描述

<template>
    This is ComponentA, title = {{title}}, userName = {{userName}}
</template>

<script>
import pubsub from "pubsub-js";

export default {
    data() {
        return {
            title: '',
            userName: ''
        }
    },
    mounted() {
        this.pid = pubsub.subscribe('test', (msgName, data )=> {
            console.log('有人发布了 test , test 消息的回调执行了', msgName, data);
            this.title = data.title;
            this.userName = data.userName;
        })
    },
    beforeDestroy() {
        pubsub.unsubscribe(this.pid)
    }
}
</script>

📌2、新增父组件 FuComponent

在这里插入图片描述

<template>
  <component-a></component-a>
  <br />
  <button @click="send">点击发布消息</button>
</template>

<script>
import ComponentA from '@/components/ComponentA.vue'
import pubsub from "pubsub-js";

export default {
    components: { ComponentA },
    methods: {
        send() {
            let sendData = {
                title: "google",
                userName: "Jack"
            };
            pubsub.publish("test", sendData);
        }
    }
};
</script>

📌3、测试

🎈点击访问 “http://localhost:8080/fuComponent”
在这里插入图片描述

🎈点击按钮

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#线性插值,三角插值

什么是插值&#xff1f; 是什么&#xff1f;很简单&#xff01; 已知两点&#xff0c;推断中间的每一点的过程。 有什么用&#xff1f; 很简单&#xff01;位置从30到40耗时3秒求每一时刻的位置&#xff01; 1.线性插值 设v是结果&#xff0c;start是开始&#xff0c;end是结…

数据分析之Matplotlib

文章目录 1. 认识数据可视化和Matplotlib安装2. 类型目录3. 图标名称title4. 处理图形中的中文问题5. 设置坐标轴名称&#xff0c;字体大小&#xff0c;线条粗细6. 绘制多个线条和zorder叠加顺序7. 设置x轴刻度xticks和y轴刻度yticks8. 显示图表show9. 设置图例legend10. 显示线…

MQTT协议在物联网环境中的应用及代码实现解析(一)

MQTT协议全称是Message Queuing Telemetry Transport&#xff0c;翻译过来就是消息队列遥测传输协议&#xff0c;它是物联网常用的应用层协议&#xff0c;运行在TCP/IP中的应用层中&#xff0c;依赖TCP协议&#xff0c;因此它具有非常高的可靠性&#xff0c;同时它是基于TCP协议…

C# HTTP Error 500.19

解决办法&#xff1a; .vs configapplicationhost.config 修改<section name"windowsAuthenticationnurununoverrideModeDefault"Allow”/>

【SCI一区】【电动车】基于ADMM双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.2 电动车动力学方程 1.3 电池模型 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、数据、文章讲解 &#x1f4a5;1 概述 文献来源&#xff1a; 随着车辆互联性的出现&#xff0c;互联汽车 (CVs) 在增强道路安全、改…

Lazygit贴合 neovim

功能性要比gitui 好用&#xff0c;vim 的键位习惯 > 嵌入式数据库 &#xff0c;python 的性能够用了 … … ,分析差异&#xff0c;选择 备份和升级

stm32 报错 dev_target_not_halted

烧录stm32H743&#xff0c;在cubeprogrammer里面点击connect&#xff0c;报错dev_target_not_halted 解决方法&#xff1a;先把H743的boot0引脚接到高电平上&#xff0c;然后少上电&#xff0c;此时会停止内核的运行&#xff0c;再点击connect即可 H743管脚&#xff1a; 在芯…

ES系列--es进阶

一、系统架构 一个运行中的 Elasticsearch 实例称为一个节点&#xff0c;而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成&#xff0c; 它们共同承担数据和负载的压力。当有节点加入集群中或者 从集群中移除节点时&#xff0c;集群将会重新平均分布所有的数据。 …

「深度学习之优化算法」(十四)麻雀搜索算法

1. 麻雀搜索算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   麻雀搜索算法(sparrow search algorithm)是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。提出时间是2020年,相关的论文和研究还比较少,有可能还有一些正在发表中,受疫情影响需要论…

Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系

目录 volume 卷 官方文档&#xff1a;卷 | Kubernetes 一、emptyDir&#xff08;临时卷&#xff09; 二、hostPath卷 type字段参数 hostPath 实验&#xff1a; 三、第3方提供的存储卷&#xff08;百度云、阿里云、亚马逊云、谷歌云等&#xff09; 四、local卷 五、NF…

回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测(注意力机制融合门控循环单元,TPA-GRU)

回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测----注意力机制融合门控循环单元&#xff0c;即TPA-GRU&#xff0c;时间注意力机制结合门控循环单元 目录 回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测----注意力机制融合门控循环单元&#xff0c;即TPA-G…

如何在无人机支持下完成自然灾害风险评估的原理和方法

对灾害的损失进行估算与测算是制定防灾、抗灾、救灾 及灾后重建方案的重要依据。 自然灾害评估按灾害客观地发展过程可分三种&#xff1a;一是灾前预评估&#xff0c;二是灾期跟踪或监测性评估&#xff0c;三是灾后实测评估。 灾前预评估要考虑三个因素&#xff0c;第一是未来…

真正的理解WPF中的TemplatedParent

童鞋们在WPF中经常看到 TemplatedParent ,或者经常看到下面的用法: {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content} 是不是看的一脸蒙圈? 先看官方文档: 意思是 和这个控件的 模板上的 父亲,如果这个控件不是模板创建的,那么这个值就…

Python爬虫学习笔记(三)————urllib

目录 1.使用urllib来获取百度首页的源码 2.下载网页图片视频 3.总结-1 4.请求对象的定制&#xff08;解决第一种反爬&#xff09; 5.编解码 &#xff08;1&#xff09;get请求方式&#xff1a;urllib.parse.quote&#xff08;&#xff09; &#xff08;2&#xff09;get请求…

使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第 1 部分-介绍和设置

示例:图像上的对象检测 介绍 实时视频中的目标检测和跟踪是计算机视觉的一个重要领域,在监控、汽车和机器人等各个领域都有广泛的应用。 由于需要能够识别和跟踪对象、确定其位置并对它们进行实时分类的自动化系统,对视频帧中的实时对象检测和跟踪的需求日益增加。 在这…

迁移 Gitee 仓库到 Github

Step1: 在Gitee找到你要迁移的仓库, 并复制 克隆|下载 链接 Step2: 打开 Github, 找到 按钮选择 Import Step3: 打开 Github, 找到 按钮选择 Import Step4: Waiting... 等待导入成功 Over~ 还有一种镜像更新的方案, Gitee 支持镜像同步, 但是我使用时无法获取到仓库名,…

初识vue3/setup/ ref()/ computed/watch/生命周期/父传子

创建项目先不着急学 main.js变了 新加setup reactive ref() computed watch 生命周期 父传子 子传父 ref/模板引用 暴露子组件属性 跨层传数据 defineOptions

RabbitMQ之交换机

RabbitMQ之交换机 1. Exchanges1.1 Exchanges 概念1.2 Exchanges 的类型1.3 无名 exchange 2. 临时队列3. 绑定&#xff08;bindings&#xff09;4. Fanout4.1 Fanout 介绍4.2 Fanout 实战 5. Direct exchange5.1 Direct exchange 介绍5.2 多重绑定5.3 实战 6. Topics6.1 之前类…

API漏洞检测研究

xray API漏洞检测_青霄的博客-CSDN博客 Swagger ui接口自动化批量漏洞测试_swgeer-ui 漏洞_山山而川的博客-CSDN博客 什么是 API 安全测试以及它是如何工作的&#xff1f; | Synopsys API 安全测试针对应用程序编程接口 (API) &#xff0c;就其安全性、正确性和可靠性进行测试&…

LeetCode 75 第四题(605)种花问题

题目: 示例: 分析: 给一个数组表示一个花园,其中0表示空地,1表示已经有花种下去了. 空地可以种花,但是花和花之间不能相邻,即数组中不能有两个连续的1. 给一个数n,问我们能不能在花园里种n朵花. 我们可以找出我们所能种的最多的数量(而不是只种n朵),然后比较我们最多能种的…