当前位置: 首页 > news >正文

Vue 消息订阅与发布

消息订阅与发布,也可以实现任意组件之间的通信。

订阅者:就相当于是我们,用于接收数据。

发布者:就相当于是媒体,用于传递数据。

 安装消息订阅与发布插件:

在原生 JS 中 不太容易实现消息订阅与发布,所以我们这里借助第三方库实现 推荐使用 pubsub-js 库 它可以在任意一个框架中使用。

安装命令

npm i pubsub - js


安装完成后在需要使用的组件中引入即可

 消息订阅与发布使用流程:

首先创建 Content.vue 组件用于显示内容。并引入 pubsub-js 插件 通过 pubsub.subscribe 方法订阅消息 接收数据.

<template><div><h2>{{ name }}</h2></div>
</template><script>
import pubsub from "pubsub-js"
export default {name: "Content",data() {return {name: "张三"}},mounted() {// 订阅消息 getNamepubsub.subscribe("getName", (msg, name) => {console.log(msg, name);this.name = name;})// this.$bus.$on("getName", (name) => {//     this.name = name;// })}
}
</script>

然后创建 Edit.vue 组件用于编辑内容 并引入 pubsub-js 插件 通过 pubsub.publish 方法发布消息,传递数据。

<template><div><h2>编辑姓名</h2><input type="text" v-model="name"><button @click="editName">修改</button></div>
</template><script>
import pubsub from "pubsub-js"
export default {name: "Edit",data() {return {name: ''}},methods: {editName() {// 发布消息pubsub.publish("getName", this.name);// this.$bus.$emit("getName", this.name);}}
}
</script>

最后创建 Home.vue 页面,并引用 Content.vue 和 Edit.vue 组件。

<template><div><Content></Content><hr /><Edit></Edit></div>
</template><script>
import Content from "../components/Content"
import Edit from "../components/Edit"
export default {name: "Home",components: { Content, Edit }
}
</script>

:在订阅消息中,会接收到两个参数,第一个是消息名称 第二个才是接收的数据 另外订阅消息的回调函数必须是箭头函数 否则 this 会变成 undefined.

 

:订阅的消息想要销毁时,需要先创建一个变量接收这个消息,然后通过这个变量销毁,类似于清除定时器。

<template><div><h2>{{ name }}</h2></div>
</template><script>
import pubsub from "pubsub-js"
export default {name: "Content",data() {return {name: "张三"}},mounted() {// 订阅消息 getNamethis.pubId = pubsub.subscribe("getName", (msg, name) => {console.log(msg, name);this.name = name;})// this.$bus.$on("getName", (name) => {//     this.name = name;// })},beforeDestroy() {// 取消订阅 getNamepubsub.unsubscribe(this.pubId);// this.$bus.off("getName");}
}
</script>

备注:在 Vue 中还是推荐使用全局事件总线实现组件之间的通信,消息订阅与发布在 Vue 中的使用并不多。

原创作者: 吴小糖

创作时间:2023.4.21

http://www.lryc.cn/news/61938.html

相关文章:

  • 如何在你的云服务器/云主机上更新并使用最新版本的python(python3.11)
  • python学习——【第八弹】
  • 铁路应答器传输系统介绍
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK直接实现Mono16位深度的图像保存(C#)
  • C语言入门篇——介绍篇
  • Latex数学公式排版
  • 【Linux】-关于Linux的指令(上)
  • 【论文写作】引言写作的四个重要的语言点之时态!!!
  • Super Yolo论文翻译
  • 【CocosCreator入门】CocosCreator组件 | ProgressBar(进度条)组件
  • 大数据数仓维度建模
  • ESP32设备驱动-BH1745NUC 亮度和颜色传感器驱动
  • 通达信VCP形态选股公式,憋了好几天才写出来
  • vue 知识储备
  • MySQL表的增删查改
  • 详解C语言string.h中常用的14个库函数(三)
  • 无人机视频与GIS融合三维实景怎么实现?
  • 瞬间让你效率提高一倍的高效学习方法
  • 442. 数组中重复的数据|||41. 缺失的第一个正数|||485. 最大连续 1 的个数
  • 中国地图标准坐标和投影参数
  • CNN中卷积层、池化的计算公式
  • 基类派生类多态虚函数?
  • 像素是什么
  • NAT转换
  • 设计模式:创建者模式 - 单例模式
  • C++语言亚马逊国际获取AMAZON商品详情 API接口(
  • 在程序里面执行system(“cd /某个目录“),为什么路径切换不成功?
  • c++ 对类与对象的基础框架+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏
  • 关于Open Shift(OKD) 中应用管理部署的一些笔记
  • 【linux】对于权限的理解