【发布时间】:2019-03-07 09:17:35
【问题描述】:
从 API 中获取类别,将其响应保存在数据变量 categories 中,然后尝试使用 mounted () 中的响应数据:
data () {
return {
categories: {}
}
}
created () {
this.fetchCategories()
this.showArticles(this.categories[0].id)
}
methods: {
fetchCategories () {
return axios.get(globalConfig.FAQCATS_URL)
.then((resp) => {
this.categories = resp.data
})
.catch((err) => {
console.log(err)
})
}
}
但出现错误:Cannot read property 'id' of undefined。我猜 axios 的承诺是异步的,这就是为什么我不能在 created 或 mounted 中使用它的响应。我怎样才能正确访问它的响应?
我的操作目的是在页面加载时设置默认类别,因此页面不会为空,因为如果未选择类别,我不会显示任何项目。
showArticles方法:
showArticles (id) {
return axios.get(globalConfig.FAQCATS_URL + '/' + id + '/articles')
.then((resp) => {
this.articles = resp.data
// console.log(resp)
})
.catch((err) => {
console.log(err)
})
}
【问题讨论】:
-
何时以及如何调用
fetchCategories?当fetchCategories当时不太可能被调用时,为什么你要在create中执行this.showArticles(this.categories[0].id)。请展示一个最小的、完整的代码片段,以便理解代码流。 -
抱歉,忘记添加
fetchCategories()电话。现已添加 -
然后等待
fetchCategoriesthis.fetchCategories().then(() => this.showArticles(this.categories[0].id))返回的promise。 -
this.showArticles(this.categories[0].id)看起来真的很可疑,看起来你试图以一种你不应该在 vue 中解决的方式来解决问题。 -
您介意分享
showArticles的作用吗?我同意可能有比这更好的方法。
标签: javascript vue.js axios