vue消息订阅与发布

1.知识点

是一种组件间通信的方式,适用于任意组件间通信

2.使用步骤

“消息订阅与发布”可依赖的第三方很多,这里使用pubsub-js库

1.安装pubsub:npm i pubsub-js

2.引入:import pubsub from 'pubsub-js'

3.接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件中

   methods(){

     demo(data){......}

 }

 ......

mounted(){

    this.pid = pubsub.subscribe('xxx',this.demo)   //订阅消息 

}

4.提供数据:

   pubsub.publish('xxx',数据)

5.最好在beforeDestroy钩子中,用pubsub.unsubscribe(pid)取消订阅

问题:“全局事件总线”和“消息订阅与发布”都可以实现任意组件间通信,那用哪个好?

 答案:推荐使用“全局事件总线”,因为它是vue提供的,完全使用的vue技术,而“消息订阅与发布”则是第三方。

使用语法

消息订阅 语法

import pubsub from 'pubsub-js'mounted() {
this.pubId = pubsub.subscribe('hello',(msgName,data)=>{// console.log('有人发布了hello消息,hello消息的回调执行了',msgName,data) //msgName为事件名hello data才是接收到的数据
})
},
beforeDestroy() {// this.$bus.$off('hello')   pubsub.unsubscribe(this.pubId)  //这里注意不是跟全局事件总线一样是hello事件名
}

消息发布 语法

import pubsub from 'pubsub-js'pubsub.publish('hello',666)

3.注意点:

1.取消订阅方式和“全局事件总线”不同,取消订阅指定订阅返回的id,且每次返回的id都不同,而“全局事件总线”指定的是“自定义事件名称”

2.订阅回调配置一定要使用箭头函数或者外部定义方法,在订阅中引用也行,千万不要使用普通函数,因为普通函数中this不指代vc,而是undefine,这一点跟“全局事件总线”中的注意点很像,但还是略有不同

3.消息订阅会接收到2个参数,第1个参数为消息名称,第2个参数才是传递过来的值,如写法1,但是实际msgName参数1他跟用不到它,所以可使用下划线“_”占个位,如写法2

写法一:

this.pubId = pubsub.subscribe('hello',(msgName,data)=>{// console.log('有人发布了hello消息,hello消息的回调执行了',msgName,data)
})

写法二:

this.pubId = pubsub.subscribe('hello',(_,data)=>{// console.log('有人发布了hello消息,hello消息的回调执行了',_,data)
})

4.箭头函数中的名称(msgName,data)=>{}可以随便写,但是避免使用使用关键字名字

 完整代码

Student.vue(发布方)

<template><div class="student"><h2>学生姓名:{{name}}</h2><h2>学生性别:{{sex}}</h2><button @click="sendStudentName">把学生名给School组件</button></div>
</template><script>import pubsub from 'pubsub-js'export default {name:'Student',data() {return {name:'张三',sex:'男',}},mounted() {// console.log('Student',this.x)},methods: {sendStudentName(){// this.$bus.$emit('hello',this.name)pubsub.publish('hello',666)}},}
</script><style lang="less" scoped>.student{background-color: pink;padding: 5px;margin-top: 30px;}
</style>

School.vue(订阅方)

<template><div class="school"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div>
</template><script>import pubsub from 'pubsub-js'export default {name:'School',data() {return {name:'尚硅谷',address:'北京',}},mounted() {// console.log('School',this)/* this.$bus.$on('hello',(data)=>{console.log('我是School组件,收到了数据',data)}) */this.pubId = pubsub.subscribe('hello',(msgName,data)=>{console.log(this)console.log('有人发布了hello消息,hello消息的回调执行了',msgName,data)})},beforeDestroy() {// this.$bus.$off('hello')pubsub.unsubscribe(this.pubId)},}
</script><style scoped>.school{background-color: skyblue;padding: 5px;}
</style>

参考文章:vue2知识点:消息订阅与发布_vue2消息订阅与发布_刘大猫.的博客-CSDN博客

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

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

相关文章

【数据结构】排序合集(万字详解)

文章目录 前言插入排序希尔排序选择排序堆排序快速排序hoare原生版本挖坑法前后指针法三数取中优化随机数取key优化三路划分版非递归 归并排序递归非递归调整边界单次归并单次拷贝 总结 前言 排序&#xff0c;以字面意思来说就是通过特定的算法将一组或多组无序或者接近有序的…

02Redis的命令行客户端和桌面客户端的下载和安装

Redis桌面客户端 安装完成Redis服务,我们就可以在Redis的客户端操作Redis的数据库实现数据的CRUD了,客户端分为三类命令行客户端, 图形化桌面客户端,编程客户端 命令行客户端 Redis安装完成后就自带了命令行客户端: redis-cli [options] [commonds] -h选项&#xff1a;指定…

矢量图形编辑软件illustrator 2023 mac软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软件&am…

计算机网络 实验二 交换机的基本配置

实验二 交换机的基本配置 实验目的 • 掌握交换机的配置方式及切换命令&#xff1b; • 掌握交换机端口的基本配置&#xff1b; • 掌握交换机mac地址的查看与管理方法。 实验设备 以太网交换机一台服务器一台PC机五台配置电缆、网线若干 网络拓扑及IP地址分配 给计算…

题目 1065: 二级C语言-最小绝对值

输入格式 十个数 输出格式 交换后的十个数 样例输入 10 2 30 40 50 60 70 80 90 100 样例输出 10 100 30 40 50 60 70 80 90 2 我对这题用了两个数组&#xff0c;一个存储原来的值&#xff0c;一个是镜像的绝对值。 找最小的数和序号就在镜像里&#xff0c;遍历寻找就行 #i…

Docker部署ActiveMQ消息中间件

1、准备工作 docker pull webcenter/activemq:5.14.3 Pwd"/data/software/activemq" mkdir ${Pwd}/data -p2、运行容器 docker run -d --name activemq \-p 61616:61616 \-p 8161:8161 \-v ${Pwd}/data:/opt/activemq/data \-v /etc/localtime:/etc/localtime \--r…

服务器补丁管理软件

随着漏洞的不断上升&#xff0c;服务器修补是增强企业网络安全的典型特征。作为业务关键型机器&#xff0c;计划服务器维护的停机时间无疑是一件麻烦事。但是&#xff0c;借助高效的服务器补丁管理软件&#xff08;如 Patch Manager Plus&#xff09;&#xff0c;管理员可以利用…

UE5读取json文件

一、下载插件 在工程中启用 二、定义读取外部json文件的函数&#xff0c;参考我之前的文章 ue5读取外部文件_艺菲的博客-CSDN博客 三、读取文件并解析为json对象 这里Load Text就是自己定义的函数&#xff0c;ResourceBundle为一个字符串常量&#xff0c;通常是读取的文件夹…

UML活动图

在UML中&#xff0c;活动图本质上就是流程图&#xff0c;它描述系统的活动、判定点和分支等&#xff0c;因此它对开发人员来说是一种重要工具。 活动图 活动是某件事情正在进行的状态&#xff0c;既可以是现实生活中正在进行的某一项工作&#xff0c;也可以是软件系统中某个类…

[Linux] 1.Linux的简介

Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux发行版&#xff1a;基于Linux内核定制不同风格的Linux ubuntu:嵌入式开发 …

题目 1069: 二级C语言-寻找矩阵最值

输入一个正整数n (1≤ n ≤6),再输入一个n 行n列的矩阵&#xff0c;找出该矩阵中绝对值最大的元素以及它的行下标和列下标。 输入格式 n nxn &#xff08;矩阵的数据&#xff09; 输出格式 数 行 列 样例输入 2 1 2 3 4样例输出 4 2 2 二维矩阵的创建cpp代码实现&a…

Linux实验一

#include <stdio.h> #include <stdlib.h> int main() { printf("hello ,\n"); printf("world\n"); // 使用 exit(0) 结束进程 exit(0); } #include <stdio.h> #include <unistd.h> int main() { printf("hello ,\n")…

Ubuntu上通过源码方式安装Redis

上一篇文章Ubuntu上安装、使用Redis的详细教程已经介绍了再Ubuntu操作系统上安装Redis的详细过程&#xff0c;但是因为安装的Redis只有最主要的配置文件和redis-server&#xff0c;为了更深入地学习Redis和进行更复杂的操作&#xff0c;需要安装一个完整的Redis服务。 这篇文章…

day-53 代码随想录算法训练营(19)动态规划 part 14

1143.最长公共子序列&#xff08;坐牢&#xff09; class Solution { public:int longestCommonSubsequence(string text1, string text2) {int ntext1.size(),mtext2.size();vector<vector<int>>dp(n1,vector<int>(m1,0));for(int i1;i<n;i){for(int j1…

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs 最新版 Nuxt3 项目配置 安装nuxtjs 最新版 Nuxt3 参考官网安装安装插件安装ElementPlus页面怎么跳转&#xff0c;路由怎么实现404页面该怎么配置配置 网页的title 安装nuxtjs 最新版 Nuxt3 参考官网安装 安装插件 安装ElementPlus 安装 Element Plus 和图标库 # 首先&…

Opencv源码解析(2)算法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;点击跳转 目录 一&#xff0c;直方图均衡 1&#xff0c;直方图统计 2&#xff0c;灰度变换 3&#xff0c;直方图均衡 二&#xff0c;可分离…

EasyWindow - Android 悬浮窗框架

官网 https://github.com/getActivity/EasyWindow 项目介绍 本框架意在解决一些极端需求&#xff0c;如果是普通的 Toast 封装推荐使用 Toaster 集成步骤 如果你的项目 Gradle 配置是在 7.0 以下&#xff0c;需要在 build.gradle 文件中加入 allprojects {repositories {/…

2023 年KPI (KPI:Key Performance Indicator) review

文章大纲 1. 总体情况2. 回顾与总结2.1 基础巩固2.2 工作内容充实计算机视觉coursera 2.3 AI 兴趣: NLP & AIGC2.4 面试、笔试题常读常新 (0%)2.5 读书笔记 参考文献与学习路径 2023 年的 kpi 本身就订的低&#xff0c;结果发现定的低也完不成&#xff0c;距离年底还有3个月…

【C++面向对象侯捷】8.栈,堆和内存管理

文章目录 栈&#xff0c;堆stack object的生命周期static local object的生命周期global object的生命周期heap objects 的生命期new&#xff1a;先分配memory&#xff0c;再调用构造函数delete: 先调用析构函数&#xff0c;再释放 memory动态分配所得的内存块&#xff0c;in V…

腾讯mini项目-【指标监控服务重构】2023-08-25

今日已办 traefik proxy jaeger Prometheus prometheus | Prometheus 配置完依然无法实现 web-url的前缀访问【待解决】 Set span storage type : elasticsearch services:elasticsearch:image: elasticsearch:7.17.12container_name: elasticsearchnetworks:- backend # …