Vue-消息订阅与发布(pub/sub)

news2024/12/23 1:12:29

消息订阅与发布(pub/sub)

消息订阅与发布和全局事件总线一样,也是一种组件间通信的方式

pub/sub全称为publisher(订阅)/subscriber(发布),一般需要数据的人订阅消息,提供数据的人发布消息

这个技术非常简单容易上手,主要有以下两步

1 订阅消息:消息名

2 发布消息:消息内容

想要实现这个功能,原生js不太行,需要借助第三方库,这里推荐pubsub-js,使用了这个库之后就可以在任意框架里面实现消息的订阅发布

想要使用pubsub-js,首先需要安装,所以第一步先安装

1 安装pubsub-js

首先打开终端,输入以下命令,这个库非常的小,安装很快

注意:千万不要少了后面的-js,不然就安装错了,是另外的一个库

npm i pubsub-js

2 引入pubsub-js

安装完了之后,就可以引入使用了,这里的pubsub是一个对象,里面有很多api

   //引入pubsub-js库
   import pubsub from 'pubsub-js'

3 使用pubsub-js(订阅方)

引入完毕后,就可以简单使用了,下面是我编写的案例,这里是订阅方

主要内容就是消息名要对应发布方的消息名,以及接收参数,这里接收参数有个小坑,请看下面

4 使用pubsub-js(发布方)

这里是发布方的代码

主要内容就是消息名要对应订阅方的消息名,以及传递参数

5 一个坑(回调函数两个参数)

编写好订阅方和发布方之后,我们可以测试代码了

这里发现参数不对,我传的是学生的name,参数却是消息名称

这里是因为订阅的回调函数,实际上有两个参数,1:消息名称 2:参数

这样就对了

如果不想使用第一个参数,可以使用下划线_占位,保证收到的是正常的参数

到这里基本代码就写完了,想要代码写的更完美,可以做一件收尾的事情,也就是组件销毁取消订阅

6 组件销毁取消订阅

组件要被销毁的时候,应该取消订阅

7 关于this的指向

当我们使用vue配合这个库的时候,this不是vc实例对象,而是undefined

写法1 箭头函数

如果我们想要让this指向vc实例,可以使用箭头函数,这时候再查看this,发现正常了,只要不归vue管理的函数,如果想让this指向vue,都要写成箭头函数,如果归vue管理,那么写成普通函数即可

写法2 普通函数

这种写法还是写成普通函数,但是位置不同,我们可以把逻辑提出来,在methods里面定义实现

8 总结

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

  2. 使用步骤:

    1. 安装pubsub:npm i pubsub-js
    2. 引入: import pubsub from 'pubsub-js'
    3. 接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。
    4. methods(){
        demo(data){......}
      }
      ......
      mounted() {
        this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息
      }
      
    5. 提供数据:pubsub.publish('xxx',数据)
    6. 最好在beforeDestroy钩子中,用PubSub.unsubscribe(pid)去取消订阅。

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

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

相关文章

Java集合之ArrayList详解

Java集合之ArrayList 一、ArrayList类的继承关系1. 基类功能说明1.1. Iterator:提供了一种方便、安全、高效的遍历方式。1.2. Collection:为了使ArrayList具有集合的基本特性和操作。1.3. AbstractCollection:提供了一些通用的集合操作。1.4.…

Vue-动画效果

vue动画效果 vue中动画效果是很简单的一个东西,vue帮助我们做了一些动画封装,同时也支持自定义动画,过度,第三方库,这些方式都可以实现,我们一一举例说明 注意:下面的相关截图,由于…

55 KVM工具使用指南-LibcarePlus概述

文章目录 55 KVM工具使用指南-LibcarePlus概述55.1 概述55.2 软硬件要求55.3 注意事项和约束 55 KVM工具使用指南-LibcarePlus概述 55.1 概述 LibcarePlus 是一个用户态进程热补丁框架,可以在不重启进程的情况下对 Linux 系统上运行的目标进程进行热补丁操作。热补…

语音合成 - TTS-VUE 学习

今天给小伙伴测试了一款人工智能文字合成语音的工具,测试中发现应该是某位大神开发的开源工具,经过一下午的测试,发现有可学习之处,有兴趣的小伙伴可以一起来学习下。 一、简单介绍 微软的语音合成助手利用强大的微软AI语音库&am…

牛云企业官网小程序,外卖cps权益变现,uniCloud云开发无需购买服务器和域名,助力每一位创业者。

技术优势 基于 uniapp uniCloud 研发,无需购买服务器和域名,uniCloud 是 DCloud 联合阿里云、腾讯云 serverless 构建。从此不用关心服务器运维、弹性扩容、大并发承载、防DDoS攻击等,轻松应对高并发应用, 上图 小程序页面 体…

一种新颖的智能优化算法-蝠鲼优化算法(MRFO)

目录 一、MRFO数学模型 1.1 链式觅食 1.2 旋风式觅食 1.3 翻筋斗式觅食 二、MRFO伪代码 2019年提出一种新的仿生优化技术称为魔鬼鱼觅食优化算法,旨在提供一种替代优化 解决实际工程问题的方法。该算法的灵感是基于智能算法魔鬼鱼的行为。这项工作模拟了魔鬼…

轻量应用服务器性能如何?CPU带宽流量系统盘测评

轻量应用服务器性能如何?腾讯云轻量应用服务器是一种轻量级搭建小型网站和应用的服务器,相对于其他更高性能配置的服务器CVM,性价比更高。虽然其性能不如高性能云服务器CVM,但对于小型网站和应用来说,能够提供基本的计…

JDK1.8 lambda_函数式编程_stream流

一、 lambda表达式 jdk 1.8 引入了 lambda表达式 能够我们 编写代码时更加简洁,也为函数式编程提供了支持 lambda表达式 作用 简化匿名实现类的书写,实现接口抽象方法; (参数类型 参数名1,参数类型 参数名2,……参数类型 参数名n)->{ //方法体 } …

【工具】搜狗输入法常用配置(持续更新)

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 按键相关通用快捷键系统快捷键辅助输入快捷键 2️⃣ 其它自定义语句关闭自动更新 🛬 结论 🛫 问题 描述 作为输入法的常青树,重装系统后经常第一步就是装输入法,由于以下原因&#…

开发框架前后端分离的好处是什么

关于将前端和后端保持在一起或分开,存在广泛的意见分歧。唯一重要的是,这两个组件对于开发成熟的应用程序都是必需的。 考虑:紧密耦合的前端和后端 许多人认为后端和前端的分离是一个坏主意,这两个角色之间没有太大区别。 以下…

多旋翼无人机振动分析与减振方法

多旋翼无人机振动分析与减振方法 振动分析无人机减振设计机械减振数字滤波减振 振动分析 振动机制包括: 激励(振动源)系统响应 无人机振动机制: 激励 —— 动力系统(旋翼电机)系统 —— 机架响应 —— …

《产品思维》 要点

“一切以用户价值为依归”的价值观,落地下来就是从用户中来,到用户中去。 认知用户 用户画像 用户是一切产品的源头 用户不是理性人 我们的用户到底是谁、究 竟在哪里。这个“到底是谁”“究竟在哪里”。 用户生活工作的环境,是他们日常的…

【机器学习】机器故障的二元分类模型-Kaggle竞赛

竞赛介绍 数据集描述 本次竞赛的数据集(训练和测试)是从根据机器故障预测训练的深度学习模型生成的。特征分布与原始分布接近,但不完全相同。随意使用原始数据集作为本次竞赛的一部分,既可以探索差异,也可以了解在训…

[RockertMQ] Broker启动加载消息文件以及恢复数据源码 (三)

Broker的启动过程中, 在DefaultMessageStore实例化后, 会调用load方法将磁盘中的commitLog、ConsumeQueue、IndexFile文件的数据加载到内存中, 还有数据恢复的操作。 调用isTempFileExist方法判断上次broker是否是正常退出, 如果是正常退出不会保留abort文件, 异常退出则会。 …

【MySQL】关于自增id、雪花id还是uuid作为MySQL主键

在MySQL中设计表的时候,MySQL官方推荐不要使用uuid或者不连续不重复的雪花id(long型且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment。那么为什么不使用雪花id或者uuid呢?让我们来探讨分析一下这个问题的原因。 关于…

【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)

零基础带你进军人工智能领域的全流程技术体系和实战指南(机器学习基础知识) 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标核心内容机器学习的概念定义回顾人工智能机器学习概念国外知名学者对机器学习的定义中文翻译 机器学习发展历程机器学习…

Oracle JSON_ARRAYAGG()函数的排序失效问题

引入: 在实际操作中,俺写了这样一个Funtcion: FUNCTION fun_get_xxx(v_param_one VARCHAR2) RETURN CLOB ASv_OUTPUT CLOB;BEGINWITH temp_table AS (SELECT * FROM (( SELECT one.action_id,two.log_timeFROM table_one oneLEFT JOIN table…

【深度学习】6-4 卷积神经网络 - CNN的实现

CNN的实现 网络的构成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”,我们将它实现为名为 SimpleConvNet的类。 首先来看一下 SimpleConvNet的初始化(init),取下面这些参数。 input_dim——输入数据的维…

七彩虹CN600+Meetiger N10C测评

七彩虹CN600这款M.2固态硬盘的参数就不多说了 本期采用为512版本 迷虎品牌,英文名Meetiger,Meetiger/迷虎品牌成立于2012年,品牌迷虎产品主要有硬盘底座,保护盒,硬盘座,移动硬盘盒子,硬盘盒子,... 以下就是本期的硬盘盒 当这两样东西在一起…

C++(10):泛型算法

泛型算法:可用于不同类型的容器和不同类型的元素的通用算法。 概述 大多数算法都定义在头文件algorithm 中。标准库在头文件 numeric 中定义了一组数值泛型算法。 一般情况下,泛型算法不直接操作容器,而是遍历由两个迭代器指定的一个元素范…