我正在用Vue.js创建一个组件.
当我引用this中的任何所述的生命周期钩(created,mounted,updated等等)它的计算结果为undefined:
mounted: () => {
console.log(this); // logs "undefined"
},
Run Code Online (Sandbox Code Playgroud)
在我的计算属性中也发生了同样的事情:
computed: {
foo: () => {
return this.bar + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
未捕获的TypeError:无法读取未定义的属性"bar"
为什么在这些情况下进行this评估undefined?
我正在使用lodash去抖动函数调用,但我想知道为什么我的this值不像我期望的那样继承范围.
这些是我的Vue组件的相关部分.
import debounce from 'lodash/debounce';
watch: {
query: debounce(() => {
this.autocomplete();
}, 200, {
leading: false,
trailing: true
}),
Run Code Online (Sandbox Code Playgroud)
上面的情况不起作用,因为我的this值不指向Vue组件,而是显示如下的Object:
Object
__esModule: true
default: Object
__proto: Object
Run Code Online (Sandbox Code Playgroud)
我的箭头语法是不是要继承上下文this?
以下似乎工作正常:
query: debounce(function test() {
this.autocomplete();
}, 200, {
leading: false,
trailing: true
})
Run Code Online (Sandbox Code Playgroud)
对此可能有一个简单的答案,但我希望有人可以帮助我.
由于我对写问题还很陌生,我对可能的错误表示歉意。
问题:我有一个带有打字稿的 vue 应用程序。
export default {
methods: {
setProgram: (program: Program)=>{
this.program = program // TS2532: Object is possibly 'undefined'.
this.step++ // TS2532: Object is possibly 'undefined'.
}
},
...
}
Run Code Online (Sandbox Code Playgroud)
虽然我真的很喜欢打字稿的这个功能,但我真的确信,在这种情况下“this”不会是未定义的。
我怎样才能让打字稿平静下来关于“this”的使用?
非常感谢大家,祝你有美好的一天!
最好的多姆。
我知道 vue 期望 data 是一个返回对象的函数,所以:
data () {
return {}
}
Run Code Online (Sandbox Code Playgroud)
有效,但这不起作用:
data: () => {
}
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用?不是'它们都是返回一个对象的相同函数