【问题标题】:How to set a Vue variable equal to a function argument?如何将 Vue 变量设置为等于函数参数?
【发布时间】:2020-04-18 13:10:07
【问题描述】:

我正在制作一个可以通过 node.js 服务器发送和接收 OSC 数据的 Web 应用程序。这一切都很好。但是我想在前面使用 Vue.js,在这里我在声明一个函数时遇到了问题。当我只使用 JavaScript 时,它运行良好。

Javascript:

import osc from "osc";
var port = new osc.WebSocketPort({
  url: "ws://localhost:8083" //localhost:8083 online server 178.62.209.37:8083
});
port.open();

var message = []

OSCMessage();

function OSCMessage() {
  port.on("message", function(oscMessage) {
    //console.log(oscMessage);
    OSCMessages(oscMessage);
  });
}

function OSCMessages(oscMessage) {
  message = oscMessage;
  console.log(message);
}

但是当我尝试将其放入 Vue 时,我在控制台中收到错误,即使我尝试使用 this.OSCMessages

OSCMessages 未定义

Vue 代码:

import osc from "osc";
var port = new osc.WebSocketPort({
  url: "ws://localhost:8083" //localhost:8083 online server 178.62.209.37:8083
});
port.open();

export default {
  data() {
    return {
      value: 60,
      message: [],
    }
  },
  computed: {
    OSCMessage: function() {
      port.on("message", function(oscMessage) {
        //console.log(oscMessage); // this console log is working great.
        this.OSCMessages(oscMessage)
      });
    },
    OSCMessages: function(oscMessage) {
      this.message = oscMessage
      console.log(this.message.address);
    },
  },
}

我的目标是让Vue变量message等于oscMessage,这样我就可以继续在Vue中使用oscMessage数据。我认为这与 Vue 中的作用域有关。我希望有人可以帮助我,在此先感谢!

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component osc


    【解决方案1】:

    有两个问题。

    1) 如果不使用 es6 箭头函数作为回调,那么this 将不会引用 Vue 实例。

    改变这个:

    port.on("message", function (oscMessage) {    
       this.OSCMessages(oscMessage)
    });
    

    到:

    port.on("message", (oscMessage) => {    
       this.OSCMessages(oscMessage)
    });
    

    2) 这些似乎都是方法,而不是计算。或者至少 OSCMessages 像方法一样被调用。您不能将参数传递给计算对象。

    变化:

    computed: {
    

    methods: {
    

    【讨论】:

    • 如果您对此有任何疑问,请告诉我。您需要运行this.OSCMessage() 来注册端口侦听器。您可以在 created() 生命周期挂钩中执行此操作。
    • 嗨,丹,感谢您的帮助!它现在完全按照我的意愿工作。我可以通过 Vue.js 使 OSC 数据可见。我使用了 "" beforeMount()"" 但也许通过 ""created()"" 是更好的选择?
    • 嗨,Dominique,不客气——我很高兴它能正常工作。对于您的问题,created 是处理纯粹与数据相关的事情的好地方,而mountedbeforeMount 通常更多地涉及与 DOM 相关的操作。它们专门与数据准备好后 DOM 的状态有关。
    • 嗨,丹。是的,我已经读过一些关于我将其更改为 created() 的内容,也许它的效果甚至比 ;) 再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多