从监视的变量获取数据

时间:2019-06-24 20:55:58

标签: javascript vue.js

我有一个初学者的问题。也许我太愚蠢了。

情况: 我有一个界面,可以通过滑块设置警报计时器值。每次更新值时,都会将其记录到文件中。 但是,当我设置间隔时,我无法从回调函数访问所监视的变量,请参阅timeCallback()。

Vue.component('alarm-comp', {
  data: function() {
    return {
      data: {
        wakeup: {
          text: "Get up",
          time: 30, //timeout
        },
        ...
      },
      test: "test",
      ...
    },
  watch: {
    data: {
      handler(val) {
        this.saveSettings(); 
      },
      deep: true
    }
  },
  mounted: function() {
    this.readSettings();
    setInterval(() => {this.timerCallback()}, (this.data.wakeup.time) * 1000); // -> time correctly set
  },
  methods: {
    timerCallback() {
      console.log(this.test); // -> test
      console.log(this.data.wakeup.time); // -> undefined
    },
  }

2 个答案:

答案 0 :(得分:0)

嗨,玛格,欢迎您来此。

在VueJS中,信息通过props被向下传递到组件,并通过发出事件被向上传递给父组件。如果您希望父组件知道间隔何时结束,则应向上发出该事件。

查看以下示例:https://codepen.io/bergur/pen/jjwZxO?editors=1010

在我的警报组件中,主要是

mounted() {
    setInterval(() => {
        this.$emit('finished', this.wakeup.text)
        }, (this.wakeup.time) * 1000
      );
  },

在这里,我创建了一个完成事件,该事件发送唤醒文本(请注意,我删除了多余的数据包装器)

在我的父对象中,我听那个事件

<Alarm @finished="logMessage" />

logMessage所做的就是这样:

methods: {
    logMessage(msg) {
      console.log('the alarm has finished and sent this message: ', msg)
    }
  },

请注意,setInterval会多次发出事件。

答案 1 :(得分:0)

自昨天以来,我一直在试图弄清楚它,由于某种原因,您的代码没有执行挂接的钩子,我只是复制了您的代码(在观看之前缺少一个右括号,也许只是示例代码)而意识到如果您将安装的钩子更改为创建的其他钩子,至少在我的示例中,这将触发并起作用。

created() { this.readSettings(); setInterval(() => {this.timerCallback()}, (this.data.wakeup.time) * 1000); }

您真的需要挂接的钩子吗,还是可以更改为已创建的钩子?