Javascript 如何使组件网等待axios从API获得响应?

Javascript 如何使组件网等待axios从API获得响应?,javascript,vuejs2,axios,Javascript,Vuejs2,Axios,我正在尝试构建一个应用程序,从我创建的API(django rest框架)中提取数据,并基于该数据,它应该显示d3饼图。不幸的是,图表并不等待axios得到响应,而是抛出错误。似乎图表只能访问data()中定义的变量,以后对该变量的任何更改都不会影响它 问题视图 {{问题} 导出默认值{ 数据(){ 返回{ 加载:false, 问题:无效,, 图表数据:{ 图表类型:'pieChart', 选择器:'图表', 标题:“重要数据”, 宽度:1000, 身高:700, 指标:“选项投票”, dim

我正在尝试构建一个应用程序,从我创建的API(django rest框架)中提取数据,并基于该数据,它应该显示d3饼图。不幸的是,图表并不等待axios得到响应,而是抛出错误。似乎图表只能访问
data()
中定义的变量,以后对该变量的任何更改都不会影响它


问题视图
{{问题}
导出默认值{
数据(){
返回{
加载:false,
问题:无效,,
图表数据:{
图表类型:'pieChart',
选择器:'图表',
标题:“重要数据”,
宽度:1000,
身高:700,
指标:“选项投票”,
dim:“选项_文本”,
数据:空,
},
}
},
已创建:函数(){
这是axios
.get(“http://localhost:8000/api/questions/“+this.$route.query.q)
.然后(response=>(this.question=response.data))
.然后(response=>(this.chartData.data=response.data.options))
.然后(this.loaded=true)
.catch(error=>(this.error=error));
},
};

我错过什么了吗?有没有办法让整个页面等待API调用完成并将该值推送到
data()

您可以通过执行简单的
v-if


数据不应该是函数返回的对象吗

像这样:

data: function () {
    return { a: 1 }
 }

好的,我已经让它工作了,但将所有数据放在一个对象中:

<template>
  <div id="question">
    <h1>{{ data.question.question_text }}</h1>
    <v-chart :chartData="data.chartData"></v-chart>
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: null
    };
  },
  created: function() {
    this.axios
      .get("http://localhost:8000/api/questions/" + this.$route.query.q)
      .then(
        response =>
          (this.data = {
            question: response.data,
            chartData: {
              chartType: "pieChart",
              selector: "chart",
              title: "Important Data",
              width: 1000,
              height: 700,
              metric: "option_votes",
              dim: "option_text",
              data: response.data.options
            }
          })
      )
      .catch(error => (this.error = error));
  }
};
</script>

{{data.question.question_text}
导出默认值{
数据(){
返回{
数据:空
};
},
已创建:函数(){
这是axios
.get(“http://localhost:8000/api/questions/“+this.$route.query.q)
.那么(
响应=>
(此数据={
问题:答复.数据,
图表数据:{
图表类型:“pieChart”,
选择器:“图表”,
标题:“重要数据”,
宽度:1000,
身高:700,
指标:“选项投票”,
dim:“选项_文本”,
数据:response.data.options
}
})
)
.catch(error=>(this.error=error));
}
};

看起来有两个引用响应对象的.then()函数无效。

请查看计算属性:另一个选项是在收到数据后重新加载图表。计算属性不会更改任何内容。。。收到数据后如何重新加载图表?与OP的问题无关这似乎不起作用。它可以防止所有错误,但不显示任何内容。-正如您所看到的,问题变量充满了来自API的数据,但chartData.data从不更改。。。