无法访问组件观察器 nuxtjs 内部的 "this"

can't access "this" inside of component watcher nuxtjs

我有一个状态为 属性 的组件,名为 "volume",它绑定到一个滑块元素。我有一个绑定到卷 属性 的观察者,这样当卷更新时,一个函数应该触发

data () {return {
  volume: 0, 
}},

 methods: {
  testMethod () {
    console.log("this is firing")
  }
 },

watch: {
  volume: (v) => {
    console.log("volume has been updated", v);
    this.testMethod();
  }
}

在 运行 这段代码中,控制台显示错误 "Cannot read property of "testMethod" of undefined

我尝试了其他方法,例如访问 $store(这是我最初的问题),但也未能解决。

您不能在 Vue.js 组件(Nuxt 或其他)中使用 fat-arrow 符号。 fat-arrow 函数定义使用了错误的上下文(在您的情况下为 this),这就是您 运行 陷入此问题的原因。

<script>
  export default {
    data () {return {
      volume: 0, 
    }},

     methods: {
      testMethod () {
        console.log("this is firing")
      }
     },

    watch: {
      // Your old code.
      // volume: (v) => {
      //   console.log("volume has been updated", v);
      //   this.testMethod();
      // }
      // The corrected way.
      volume(v) {
        console.log("volume has been updated", v);
        this.testMethod();
      }
    }
  };
</script>

您正在使用 Arrow Function,它将 this 关键字绑定到定义函数的对象,而不是调用函数的对象(它是组件的当前实例这种情况)。

改为使用常规函数语法:

watch: {
  volume(v) {
    console.log("volume has been updated", v);
    this.testMethod();
  }
}