gpt4 book ai didi

javascript - VueJs 无法访问函数内的数据属性

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:01 26 4
gpt4 key购买 nike

我在函数内访问数据属性时遇到问题。我遗漏了一些东西,我不知道是什么。

这是我的类(class)

export default {
name: "Contact",
components: {
FooterComponent: FooterComponent,
NavigationComponent: NavigationComponent
},
data() {
return {
locale: Cookie.get('locale'),
nameAndLastName: '',
email: '',
subject: '',
message: '',
showPopUp: false
}
},
methods: {
sendEmail(e) {
e.preventDefault();
this.$validator.validateAll();
if (!this.$validator.errors.any()) {
let params = new URLSearchParams();
params.append('nameAndLastName', this.nameAndLastName);
params.append('email', this.email);
params.append('subject', this.subject);
params.append('message', this.message);

axios.post(this.$apiUrl + `rest/api/public/Contact/contact`, params, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(function (response) {
if (response.statusText === 'OK') {
console.log(this.showPopUp);
this.showPopUp = true;
}
})
.catch(function (error) {
console.log(error);
// This throws error TypeError: Cannot read property 'showPopUp' of undefined

});
}
}
},
mounted: function () {
console.log('test');
console.log(this.showPopUp);
},
}

所以问题是当我发送消息时,响应正常,电子邮件已发送,但我不断收到错误 TypeError: Cannot read property 'showPopUp' of undefined... 当我尝试在 mounted hook 中打印 console.log(this.showPopUp),变量显示正常,那么为什么我无法从该方法访问它?我正在使用 VueJs 2。

如果您需要任何其他信息,请告诉我,我会提供。谢谢!

最佳答案

.then() 回调中的 this 指的是回调本身,而不是指您要查找的代理数据。

为了让它工作,您需要将正确的 this 上下文分配给另一个变量,然后使用这个变量。

这就是它查看代码的方式:

export default {
name: "Contact",
components: {
FooterComponent: FooterComponent,
NavigationComponent: NavigationComponent
},
data() {
return {
locale: Cookie.get('locale'),
nameAndLastName: '',
email: '',
subject: '',
message: '',
showPopUp: false
}
},
methods: {
sendEmail(e) {
var self = this: // assign context to self variable
e.preventDefault();
this.$validator.validateAll();
if (!this.$validator.errors.any()) {
let params = new URLSearchParams();
params.append('nameAndLastName', this.nameAndLastName);
params.append('email', this.email);
params.append('subject', this.subject);
params.append('message', this.message);

axios.post(this.$apiUrl + `rest/api/public/Contact/contact`, params, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(function (response) {
if (response.statusText === 'OK') {
console.log(this.showPopUp);
self.showPopUp = true; // assign it like this
}
})
.catch(function (error) {
console.log(error);
// This throws error TypeError: Cannot read property 'showPopUp' of undefined

});
}
}
},
mounted: function () {
console.log('test');
console.log(this.showPopUp);
},
}

这就是 ES6 箭头函数如此有用的原因。那里的 this 不是指函数本身。

所以你也可以像这样使用箭头函数:

.then((response) => {
if (response.statusText === 'OK') {
console.log(this.showPopUp);
this.showPopUp = true;
}
})

关于javascript - VueJs 无法访问函数内的数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50527835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com