我在Vuejs组件的methods部分中使用lambda表达式。
示例如下
我触发alertyou()
并收到警报,点击“确定”。然后在vue开发人员工具中,我看到this.activated
变为true
。
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App',
activated: false
}
},
methods: {
alertme: () => { alert('Clicked'); this.activated = false; },
alertyou() {
alert('Alert You');
this.activated = true
}
}
}
然而,当我点击触发alertme
lambda的按钮时。我收到提醒信息,点击“确定”。但是这个.activated仍然是真的!
这里发生的是lambdas的限制吗?你能每个lambda只触发一个语句吗?或者,一旦发出警报,这是否必须处理范围?
答案 0 :(得分:2)
这里发生的是lambdas的限制吗?你能每个lambda只触发一个语句吗?或者,一旦发出警报,这是否必须处理范围?
它既不是。
箭头函数将this
绑定到创建箭头函数时的上下文。在这种情况下,this
不是vue实例。它可能是window
使用function关键字(或ES6对象速记样式)在对象上声明的函数通常会将this
绑定到声明函数的对象。
这就是为什么您可以访问this.activated
上的alertyou
而不是alertme
您需要使用与alertyou
相同的语法来声明alertme
方法。
答案 1 :(得分:1)
将alertme: () => { alert('Clicked'); this.activated = false; }
更改为alertme() { alert('Clicked'); this.activated = false; }
。您可以看到一个有效的示例here