Vue-无法在承诺中设置未定义的属性
2017-04-25
58878
因此,我有以下 Vue 文件:
<template>
<li class="notifications new">
<a href="" data-toggle="dropdown"> <i class="fa fa-bell-o"></i> <sup>
<span class="counter">0</span>
</sup>
</a>
<div class="dropdown-menu notifications-dropdown-menu animated flipInX">
<ul v-for="notification in notifications" @click="" class="notifications-container">
<li>
<div class="img-col">
<div class="img" style="background-image: url('assets/faces/3.jpg')"></div>
</div>
</li>
</ul>
</div>
</li>
</template>
<script>
export default {
data: function() {
return {
notifications: [],
message: "",
}
},
methods: {
loadData: function() {
Vue.http.get('/notifications').then(function(response) {
console.log(response.data);
//this.notifications = response.data;
//this.notifications.push(response.data);
this.message = "This is a message";
console.log(this.message);
});
},
},
mounted() {
this.loadData();
},
}
</script>
编译正常,但是,在加载网页时,我收到以下错误:
app.js:1769 Uncaught (in promise) TypeError: Cannot set property 'message' of undefined
我也尝试过创建另一种方法,但没有成功。我真的似乎无法弄清楚为什么
this
在这里无法访问。
3个回答
您的上下文正在发生变化:因为您使用了关键字
function
,所以
this
在其范围内是匿名函数,而不是 vue 实例。
请改用箭头函数。
loadData: function() {
Vue.http.get('/notifications').then((response) => {
console.log(response.data);
//this.notifications = response.data;
//this.notifications.push(response.data);
this.message = "This is a message";
console.log(this.message);
});
},
注意:
顺便说一下,您应该继续将关键字
function
用于方法的顶层(如示例所示),否则 Vue 无法将 vue 实例绑定到
this
。
FitzFish
2017-04-25
可以在代码块外将
this
设置为
const
,然后使用该 const 值访问类属性。
即
const self = this;
blockMethod(function(data) {
self.prop = data.val();
})
sese smith
2019-02-17
在 Promise 中使用箭头函数即可访问“this”对象。
loadData: function() {
Vue.http.get('/notifications').then(response => {
console.log(response.data);
//this.message = 'Something'
});
}
Cong Nguyen
2019-02-10