vue中的消息订阅与发布

一.用处:用于组件之间数据的传递

1.弊端:需要依赖第三方库,本文采用pubsub-js库

1.1安装pubsub-js第三方库:在集成终端中运行 npm i pubsub-js

1.2:  PublisherComponent.vue的代码

<template>
  <div>
    <button @click="pubTitle">发布消息</button>
  </div>
</template>

<script>
// 发送发:发布
import pubsub from "pubsub-js";
export default {
  name: "PublisherComponent",
  methods: {
    pubTitle() {
      //发布
      pubsub.publish("title", "今天又多学了一点");
    },
  },
};
</script>

<style>
</style>

主要点:pubsub.publish("title", "今天又多学了一点");发布语法

1.3:SubscriberComponent.vue代码

<template>
  <div></div>
</template>

<script>
//接收方:订阅
import pubsub from "pubsub-js";
export default {
  name: "SubscriberComponent",
  mounted: function () {
    /*
        pubsub.subscribe('数据题目', (messageName, message) =>{}返回的是当前订阅对象的id。
        subscribe 方法用于订阅一个特定的消息,当有消息发布时,会调用一个回调函数。
        messageName:消息的题目
        message:消息的具体数据(内容)
        **/
    this.pid = pubsub.subscribe("title", (messageName, message) => {
      console.log("消息的名字:", messageName);
      console.log("消息的具体内容:", message);
    });
  },
  // 在vue实例销毁前,一定要取消消息的订阅
  beforeDestroy: function () {
    pubsub.unsubscribe(this.pid);
  },
};
</script>

<style>
</style>

主要点: 

       pubsub.subscribe('数据题目', (messageName, message) =>{}返回的是当前订阅对象的id。

        subscribe 方法用于订阅一个特定的消息,当有消息发布时,会调用一个回调函数。

        messageName:消息的题目

        message:消息的具体数据(内容)

        在vue实例销毁前,一定要取消消息的订阅

注意点 :his.pid = pubsub.subscribe("title", (messageName, message) =>{}在这里一定要使用箭头函数,这样this本身指代的才是Vue实例,如果是普通函数,这里的this就是undefined

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 使用 MQTT,一般需要安装 `paho-mqtt` 库。可以通过 `npm` 进行安装: ``` npm install paho-mqtt --save ``` 接下来,我们可以在 Vue 的组件使用 `paho-mqtt` 库进行 MQTT 的发布订阅。 首先,需要创建一个 MQTT 的客户端连接对象,可以在 Vue 组件的 `created` 生命周期进行创建: ```javascript created() { // 创建 MQTT 客户端连接对象 this.client = new Paho.MQTT.Client("localhost", 8000, "clientId"); // 连接服务器 this.client.connect({ onSuccess: this.onConnect }); }, ``` 其,`Paho.MQTT.Client` 是 `paho-mqtt` 库提供的 MQTT 客户端连接对象。它的构造函数需要传入三个参数: - `host`:MQTT 服务器的主机名或 IP 地址; - `port`:MQTT 服务器的端口号; - `clientId`:客户端 ID。 接下来,我们可以在 `onConnect` 回调函数订阅 MQTT 主题: ```javascript onConnect() { // 订阅主题 this.client.subscribe("testTopic"); }, ``` 其,`this.client.subscribe` 方法用于订阅 MQTT 主题,需要传入一个主题名称作为参数。 当客户端收到 MQTT 消息时,会触发 `onMessageArrived` 回调函数。可以在该函数处理接收到的消息: ```javascript onMessageArrived(message) { console.log("Received message:", message.payloadString); }, ``` 最后,我们可以在 Vue 组件定义发布消息的方法: ```javascript methods: { // 发布消息 publishMessage() { const message = new Paho.MQTT.Message("Hello, MQTT!"); message.destinationName = "testTopic"; this.client.send(message); }, }, ``` 其,`Paho.MQTT.Message` 是 `paho-mqtt` 库提供的 MQTT 消息对象。它的构造函数需要传入一个字符串作为消息内容。接着,我们需要为消息设置目标主题,然后通过 `this.client.send` 方法将消息发送出去。 完整的代码示例如下: ```javascript <template> <div> <button @click="publishMessage">发布消息</button> </div> </template> <script> import Paho from "paho-mqtt"; export default { data() { return { client: null, }; }, created() { // 创建 MQTT 客户端连接对象 this.client = new Paho.MQTT.Client("localhost", 8000, "clientId"); // 连接服务器 this.client.connect({ onSuccess: this.onConnect }); }, methods: { // MQTT 连接成功回调函数 onConnect() { // 订阅主题 this.client.subscribe("testTopic"); }, // MQTT 收到消息回调函数 onMessageArrived(message) { console.log("Received message:", message.payloadString); }, // 发布消息 publishMessage() { const message = new Paho.MQTT.Message("Hello, MQTT!"); message.destinationName = "testTopic"; this.client.send(message); }, }, mounted() { // 注册 MQTT 消息接收回调函数 this.client.onMessageArrived = this.onMessageArrived; }, }; </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值