【问题标题】:Call a method inside data in Vuejs在 Vuejs 中调用数据内部的方法
【发布时间】:2020-07-21 00:01:43
【问题描述】:

我试图在 vue.js 中与 Paho 建立 MQTT 连接,但我的选项对象有一些问题。

Vue.component('componente', {
    template: `<div></div>`,
    data: () => ({
        mqtt: null,
        options: {
            timeout: 3,
            onSuccess: () => this.success(), //here is the problem
            onFailure: () => this.failure(),
        },
        host: "10.0.0.11",
        port: 8083,
        client: "WebClient",
        topic: "mqtt"
    }),
    methods: {
    success: () => {
        console.log("Conexion completa");
        this.mqtt.subscribe(this.topic);
    },
    failure: (msg) => {
        console.log("error");
        console.error(msg);
    },
    message(msg){
        console.log("Mensaje " + msg.payloadString);
    },
    connect(){
        console.log("conectando");
        this.mqtt = new Paho.MQTT.Client(this.host,this.port,this.client);
        this.mqtt.onMessageArrived = this.message;
        this.mqtt.connect(this.options);
    }
  },
  mounted () {
    this.connect();
  }
});

这什么都不做,永远不会调用success 方法。但如果我改变,.connect 就可以了。

this.mqtt.connect({onSuccess: () => {this.mqtt.subscribe(this.topic)}});

以前,我在数据上调用函数时遇到了很多问题,给了我诸如“成功不是函数”之类的错误。现在,这不会显示任何错误。

编辑:下一个代码工作,但订阅功能什么都不做

this.mqtt.connect({onSuccess: this.success});

【问题讨论】:

  • 不会this 指的是新功能的本地范围吗?我认为您正在尝试实现onSuccess: this.success

标签: javascript vue.js mqtt arrow-functions paho


【解决方案1】:

只需将data 改为使用箭头函数,即

data () {
  return {
    mqtt: null,
    options: {
      timeout: 3,
      onSuccess: () => this.success(),
      onFailure: () => this.failure(),
    },
    host: "10.0.0.11",
    port: 8083,
    client: "WebClient",
    topic: "mqtt"
  }
}

您的任何方法都不应该使用箭头函数。让它们都成为普通的对象方法。

methods: {
  success () {
    console.log("Conexion completa");
    this.mqtt.subscribe(this.topic);
  },
  // etc
}

【讨论】:

  • 再次感谢 Phil,jaja,这是您第二次帮助我。你解决了我所有的问题,工作得很好。 (注意:“jaja”在西班牙语中是“haha”)
  • @DrakoPD De nada(没有 hablo español,pero Google Translate sí)
猜你喜欢
  • 2021-05-27
  • 2018-04-17
  • 2020-05-26
  • 2021-03-29
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多