Nuxt.js组件监听器中无法访问this的问题求助
问题分析与解决方案
你遇到的这个报错核心原因是箭头函数的this绑定机制和Vue组件的上下文不兼容。
在Vue的watch选项里,如果你用箭头函数定义监听回调,箭头函数并不会绑定当前的Vue实例作为this,而是继承了外层作用域的this(通常是全局window或严格模式下的undefined),所以自然找不到this.testMethod或者this.$store这些Vue实例上的属性和方法。
修复方法
把watch里的箭头函数改成普通函数就能解决问题:
data () { return { volume: 0 } }, methods: { testMethod () { console.log("this is firing") } }, watch: { volume(v) { // 替换为普通函数 console.log("volume has been updated", v); this.testMethod(); // 此时this指向Vue实例,可正常调用方法 } }
额外注意
不光是watch,Vue的methods、computed等选项里也尽量不要用箭头函数——这些场景下Vue会自动帮我们把this绑定到组件实例上,用箭头函数反而会破坏这个绑定逻辑,引发类似的上下文问题。
如果后续遇到异步回调需要保留外层上下文的场景,可以在普通函数里先把Vue实例的this存为变量(不过当前场景完全不需要):
// 仅作场景演示,当前问题不需要这么写 watch: { volume(v) { const vm = this; // 提前保存Vue实例的引用 setTimeout(() => { vm.testMethod(); // 在异步回调中通过变量访问实例 }, 1000) } }
内容的提问来源于stack exchange,提问作者Lorza
相关产品推荐
相关产品推荐

