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”
在这里插入图片描述

🎈点击按钮

在这里插入图片描述

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

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

相关文章

Springboot发送邮件

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

InstructGPT:语言模型的人类反馈指令对齐

论文标题&#xff1a;Training language models to follow instructions with human feedback论文链接&#xff1a;https://arxiv.org/abs/2203.02155论文来源&#xff1a;OpenAI 一、概述 大型语言模型&#xff08;Large language models&#xff0c;LLMs&#xff09;可以通过…

2023西南赛区ciscn -- do you like read

Attack 打开后一个商城页面 在login as admin那里有个登录页面&#xff0c;账号admin&#xff0c;密码爆破即可得到admin123 也可以在book.php?bookisbn1进行sql注入得到密码&#xff0c;这里发现是没有注入waf的 登录进来是一个Book List的管理页面&#xff0c;同时在审计源…

基于springboot的微信小程序宠物领养医院系统(源代码+数据库+10000字论文)085

基于springboot的微信小程序宠物领养医院系统(源代码数据库10000字论文)085 一、系统介绍 本项目有网页版和小程序端 本系统分为管理员、医生、用户三种角色 用户角色包含以下功能&#xff1a; 登录、注册、宠物领养、医生在线咨询、查看挂号、个人中心、密码修改、宠物寄…

【stable diffusion】保姆级入门课程-Stable diffusion(SD)介绍与安装

目录 0.学前准备 1.什么是AI绘画 2.当前主流的AI绘画工具 3.什么是SD(stable diffusion) 4.SD能做什么 1.文生图 2.图生图 3.AI换模特&#xff0c;背景 5.使用stable diffusion配置要求 6.环境配置与安装 需要注意的地方&#xff1a; 扩展知识&#xff1a; 1.pyth…

JVM运行时数据区——Java虚拟机栈

每个线程在运行时都会创建一个Java虚拟机栈&#xff0c;也是线程私有的&#xff0c;其内部包含一个个的栈帧&#xff0c;先进后出&#xff0c;对应着一个个方法的调用&#xff0c;运行完则弹出&#xff0c;所以不存在垃圾回收的问题&#xff0c;如果线程所需要的栈深度大于此线…

浅谈防火门监控系统在酒店防火安全中的重要应用

安科瑞 华楠 摘要&#xff1a;建筑防火问题已经引起人们的广泛关注&#xff0c;合理进行建筑消防设计成为了建筑设计的重要内容。防火门监控系统是建筑防火研究的新成果。对日常防火分区监控及发生火灾后对火势和有毒气体的控制起到关建作用。文章对防火门监控系统的组成和工…

vue项目中实现3D万花筒和3D文字旋转效果

一、万花筒 1、html部分 //万花筒html <div class"carousel" data-gap"368"><figure><div class"carouselItem" v-for"(item,index) in exhibitionList" :key"index"><div class"itemContent&q…

青翼科技自主研发4路AD子卡FMC137

FMC137是一款基于VITA57.4标准规范的JESD204B接口FMC子卡模块&#xff0c;该模块可以实现4路14-bit、2GSPS/2.6GSPS/3GSPS ADC采集功能。该板卡ADC器件采用ADI公司的AD9208芯片&#xff0c;&#xff0c;与ADI公司的AD9689可以实现PIN脚兼容。该ADC与FPGA的主机接口通过16通道的…

如何用smardaten无代码平台进行复杂逻辑编排?

目录 1、前言2、复杂逻辑编排是什么&#xff1f;3、服务编排-进销存&#xff08;1&#xff09;业务说明&#xff08;2&#xff09;设计说明1&#xff09;数据库设计2&#xff09;表单设计3&#xff09;列表设计4&#xff09;逻辑设计4.1 逻辑控制设计4.2 服务编排设计 4、使用体…

阿里云EMAS超级App助力Agmo电动车超级应用程序发布

近日&#xff0c;阿里云宣布与马来西亚本土数字方案专家Agmo控股&#xff08;Agmo Holdings Berhad&#xff0c;简称Agmo&#xff09;展开合作&#xff0c;签署谅解备忘录&#xff0c;联手推出马来西亚首个Agmo电动车超级应用程序。此次合作也标志着阿里云在中国以外的市场首次…

[QT编程系列-21]:基本框架 - QT常见数据结构:QString、QList、QVector、QMap、QHash、QSet、QPair详解

目录 1 QString 2 QList 3 QVector 4 QMap 5 QHash 6 QSet 7 QPair 1 QString QString是Qt中用于存储和操作字符串的类。它提供了丰富的字符串处理方法和功能。 以下是QString的一些主要特点和常用操作&#xff1a; 创建QString对象&#xff1a; QString str "H…