无法访问组件观察器 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();
}
}
我有一个状态为 属性 的组件,名为 "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();
}
}