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

这篇具有很好参考价值的文章主要介绍了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、测试

vue进阶-消息的订阅与发布,Vue,vue.js

3. 发布订阅模式改造

📌1、子组件 ComponentA 发布订阅

vue进阶-消息的订阅与发布,Vue,vue.js

<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

vue进阶-消息的订阅与发布,Vue,vue.js

<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”
vue进阶-消息的订阅与发布,Vue,vue.js

🎈点击按钮

vue进阶-消息的订阅与发布,Vue,vue.js文章来源地址https://www.toymoban.com/news/detail-595735.html

到了这里,关于vue进阶-消息的订阅与发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

    目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 在上篇文章我们介绍了父子组件之间的传值通信,本文将介绍不仅限

    2024年02月05日
    浏览(47)
  • Vue2-全局事件总线、消息的订阅与发布、TodoList的编辑功能、$nextTick、动画与过渡

    🥔:高度自律即自由 更多Vue知识请点击——Vue.js 一种组件间通信的方式,适用于任意组件间通信。通俗理解就是一个定义在所有组件之外的公共嘎达,这个嘎达可以有vm或vc上的同款 $on、$off、$emit ,也可以让所有组件都访问到。要想实现这个事情,只能在 Vue.prototype 上添加

    2024年02月11日
    浏览(41)
  • RuoYi-Vue前后端分离搭建MQTT服务器实现消息订阅、发布、数据存储 (EMQX Windows10)最全,懒人操作

    1、在RuoYi-Vue项目的superVisualizationSys-common模块下的pom.xml加入jar包依赖 3、在superVisualizationSys-commonsrcmainjavacomsuperVisualizationcommonutils目录下新建mqtt文件夹,添加以下三个文件 注:项目报红的地方可以按Alt+Enter键导包 下载路径: https://www.emqx.io/zh/download   1. 在windows上安装

    2024年02月15日
    浏览(53)
  • 使用Node.js连接和发布/订阅MQTT消息

    Node.js是一种基于事件驱动的异步I/O服务器端JavaScript运行环境,因为其非阻塞I/O和事件驱动模型,使得它非常适合处理大量并发请求的场景。MQTT是一种轻量级的消息传递协议,它是基于发布/订阅模式的,适用于传输小量数据,且具有低带宽、低电量消耗和可靠性高等特点。这

    2024年02月06日
    浏览(40)
  • react---pubsub-js消息订阅与发布

    pubsub是一个用Javascript编写的基于主题的发布/订阅库,适用于任意组件间的通信,需要先订阅再发布 ,在组件即将卸载时钩子函数中进行取消订阅。 1. 在线文档: https://github.com/mroderick/PubSubJS 2. 下载: 【npm install pubsub-js --save】 3. 使用 (1) import PubSub from \\\'pubsub-js\\\' // 引入 (2) Pub

    2024年02月08日
    浏览(31)
  • Spring Boot进阶(62):Redis魔法:用发布订阅功能打造高效消息队列!

            话说,玩过MQ的同学可能都知道【发布订阅】模式,不就是一种消息传递方式嘛;如果没玩过,那也不打紧,下文我会简单做个科普。但是对于Redis如何实现MQ的【发布订阅】功能?这才是问题的关键,有的同学就说“压根没玩过呀!不造” ,哈哈,bug菌既然敢写便有

    2024年02月09日
    浏览(49)
  • 学习SLAM:SLAM进阶(九)以激光点云赋色为例讲述如何自定义ROS的消息格式并实现消息的订阅与发布

    目录 1 为什么需要自定义的ROS消息格式 1.1 简介 1.2 ROS自定义消息格式的通用结构

    2024年02月09日
    浏览(36)
  • vue2响应式原理----发布订阅模式

    很多人感觉vue2的响应式其实用到了观察者+发布订阅。我们先来看一下简单的发布订阅的代码: 从上面中发现一个重要的点,发布者和订阅者是根据key值来区分的,然后通过消息中心来中转的,他们家是是实现不知道对方是谁。 而观察者模式中观察者是一开始就知道自己观察

    2024年04月14日
    浏览(41)
  • 从Vue层面 - 解析发布订阅模式和观察者模式区别

    观察者模式和发布订阅模式作为日常开发中经常使用到的模式,我一直不能做到很好的区分。最近在看Vue的源码,里面设计到了观察者模式,比较感兴趣,就去学习了下,这里做个总结吧。 基于一个 事件中心 ,接收通知的对象是订阅者,需要先订阅某个事件,触发事件的对

    2024年02月15日
    浏览(44)
  • Vue中信息订阅与发布和配置代理服务器的使用和原理

    全局事件总线和信息订阅与发布一样都是实现任意组件的通信。常用的是全局事件总线 信息订阅与发布借用第三方库pubsub实现任意组件的通信 安装pubsub 下列代码为MyHeader组件订阅了一份信息,MyFooter负责传递信息给MyHeader 触发点击事件发布信息给MyHeader 假设目前有两个端口的

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包