无法访问组件观察器 nuxtjs 中的“this”

Posted

技术标签:

【中文标题】无法访问组件观察器 nuxtjs 中的“this”【英文标题】:can't access "this" inside of component watcher nuxtjs 【发布时间】:2020-10-09 18:35:07 【问题描述】:

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

data () return 
  volume: 0, 
,

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

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

运行此代码时,控制台显示错误“无法读取未定义的“testMethod”的属性

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

【问题讨论】:

【参考方案1】:

您不能在 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>

【讨论】:

谢谢!不知道。现在工作【参考方案2】:

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

改用常规函数语法:

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

【讨论】:

以上是关于无法访问组件观察器 nuxtjs 中的“this”的主要内容,如果未能解决你的问题,请参考以下文章

如何在组件方法中的 nuxtjs 中进行重定向而不是获取方法?

Watcher 内 Vue 类组件装饰器的访问方法

如何在组件中从 nuxtjs 的 auth 模块加载数据

模块构建失败:错误:没有给出解析器和文件路径,无法在 nuxtjs 中推断出解析器

如何使用 Vue 类组件在 NuxtJs 项目中注册附加 Hook

Vue 2 和 NuxtJS - 来自父级的样式子组件