Javascript 未捕获(承诺中)类型错误:无法设置属性';playerName';评估时未定义的
我试图将GET请求中的Javascript 未捕获(承诺中)类型错误:无法设置属性';playerName';评估时未定义的,javascript,vue.js,vuejs2,axios,Javascript,Vue.js,Vuejs2,Axios,我试图将GET请求中的response.data.response.displayName分配给我的playerName属性,但是,我得到一个错误“Uncaught(in promise)TypeError:无法设置eval时未定义的属性“playerName””。我正在成功地将控制台日志记录到response.data.response.displayName,因此其中有一个displayName。如果您能告诉我为什么会出现这个错误,我将不胜感激 export default { data
response.data.response.displayName
分配给我的playerName属性,但是,我得到一个错误“Uncaught(in promise)TypeError:无法设置eval时未定义的属性“playerName”
”。我正在成功地将控制台日志记录到response.data.response.displayName
,因此其中有一个displayName。如果您能告诉我为什么会出现这个错误,我将不胜感激
export default {
data: function() {
return {
playerName: ''
}
},
methods: {
},
mounted() {
axios.get('/User/GetBungieNetUserById/19964531/')
.then(function(response) {
this.playerName = response.data.Response.displayName
console.log(response.data.Response.displayName)
});
}
}
使用lambda函数(箭头函数)到达代码
export default {
data: function() {
return {
playerName: ''
}
},
methods: {
},
mounted() {
axios.get('/User/GetBungieNetUserById/19964531/')
.then((response) => {
self.playerName = response.data.Response.displayName
console.log(response.data.Response.displayName)
});
}
}
其他注释和答案都是正确的-使用arrow/lambda函数而不仅仅是
函数
将起作用。但原因有细微差别
Javascript的这个的概念定义得很好,但并不总是你从其他语言中所期望的那样<当您从回调之类的子函数执行时,此
可以在一个范围块内更改。在您的情况下,then
中的函数不再理解这个
,就像您直接在mounted()
中运行相同的代码一样
但是,您可以将函数绑定到(除其他用途外)附加了无法更改的特定this
。箭头函数隐式地执行此操作,并将此
绑定到创建箭头函数的上下文中的此
。因此,该代码:
axios.get('/User/GetBungieNetUserById/19964531/')
.then((response) => {
this.playerName = response.data.Response.displayName
console.log(response.data.Response.displayName)
});
正确理解此
。它(大致!)相当于以下内容:
axios.get('/User/GetBungieNetUserById/19964531/')
.then((function(response) {
this.playerName = response.data.Response.displayName
console.log(response.data.Response.displayName)
}).bind(this));
使用(response)=>{this.playerName=…}
。使用函数
关键字,您将丢失原来的此
上下文箭头函数:响应=>{this.playerName=/*…代码的其余部分*/}
Hmmm,因此在这种情况下必须使用箭头函数?您可以在axios调用之前执行让它=此
,在回调函数中,使用that
而不是this
@Bobimaru不,您可以执行函数(响应){/*code*/}.bind(this)
我正在做完全相同的事情,但我还是得到了错误。不过我使用了一个函数。我的问题似乎是我没有在“mounted()”中执行此操作。我想点击一个按钮就可以完成。