在mounted获取不到data中的值,其中data的值是由在created中请求并初始化的。
今天发现,在created中发起ajax请求,并给data中的值进行了初始化,随后想要在mounted使用初始化后的值,结果却怎么也获取不到,打印的结果如下:
js代码是这样的
export default {
created() {
this.getData();
},
data() {
return {
reportData: {}
};
},
methods: {
async getData() {
const { data: res } = await this.$http.get("reports/type/1");
if (res.meta.status !== 200) {
this.$message.error("获取报表失败!");
}
this.reportData = res.data;
}
},
mounted() {
console.log(this.reportData);
}
};
**打了断点之后发现原因:在执行created然后发送请求的时候,mounted并不会等这次请求结束才去执行,而是直接就去执行,而此时data中的值还没有被赋值,所以拿不到。**于是,我手动加了延时试了一下
mounted() {
setTimeout(() => {
console.log(this.reportData);
}, 1000);
}
结果有值了:
解决:
1.加延时
2.将请求放在mounted中
mounted() {
setTimeout(async () => {
const { data: res } = await this.$http.get("reports/type/1");
if (res.meta.status !== 200) {
this.$message.error("获取报表失败!");
}
this.reportData = res.data;
console.log(this.reportData);
}, 1000);
}
- 通过watch
参考: https://blog.csdn.net/carlyll/article/details/105124084