【问题标题】:The chart doesn't display the data from my call to the API with Axios图表不显示我使用 Axios 调用 API 的数据
【发布时间】:2020-09-08 03:41:03
【问题描述】:

一段时间以来,我一直在尝试使用 axios 显示来自我的 API 的数据的图表。 API 上使用 axios 的 get 运行良好,但数据未显示在图表上。但是,我按照教程在 chart.js 上加载了 v-if =。

谁能帮助我,因为我真的不明白?

谢谢

这是我的代码:

`<template>
  <div class="charts">
    <div class="row">
      <div class="flex md6 xs12">
        <va-card
          v-if ="loaded"
          class="chart-widget"
          :title="$t('charts.verticalBarChart')"
        >
          <va-chart :data="verticalBarChartData" type="vertical-bar"/>
        </va-card>
      </div>
      <div class="flex md6 xs12">
        <va-card
          class="chart-widget"
          :title="$t('charts.horizontalBarChart')"
        >
          <va-chart :data="horizontalBarChartData" type="horizontal-bar"/>
        </va-card>
      </div>
    </div>

    <div class="row">
      <div class="flex md12 xs12">
        <va-card
          class="chart-widget"
          :title="$t('charts.lineChart')"
        >
          <va-chart :data="lineChartData" type="line"/>
        </va-card>
      </div>
    </div>

    <div class="row">
      <div class="flex md6 xs12">
        <va-card
          class="chart-widget"
          :title="$t('charts.pieChart')"
        >
          <va-chart :data="pieChartData" type="pie"/>
        </va-card>
      </div>
      <div class="flex md6 xs12">
        <va-card
          class="chart-widget"
          :title="$t('charts.donutChart')"
        >
          <va-chart :data="donutChartData" type="donut"/>
        </va-card>
      </div>
    </div>
    <div class="row">
      <div class="flex md12 xs12">
        <va-card
          class="chart-widget"
          :title="$t('charts.bubbleChart')"
        >
          <va-chart :data="bubbleChartData" type="bubble"/>
        </va-card>
      </div>
    </div>
  </div>
</template>

```
<script>
var dataget
import { getLineChartData } from '../../../data/charts/LineChartData'
import { getBubbleChartData } from '../../../data/charts/BubbleChartData'
import { getPieChartData } from '../../../data/charts/PieChartData'
import { getDonutChartData } from '../../../data/charts/DonutChartData'
// import { getVerticalBarChartData } from '../../../data/charts/VerticalBarChartData'
import { getHorizontalBarChartData } from '../../../data/charts/HorizontalBarChartData'
import axios from 'axios'

```

```
export default {
  name: 'charts',
  data () {
    return {
      loaded : false,
      bubbleChartData: getBubbleChartData(this.$themes),
      lineChartData: getLineChartData(this.$themes),
      pieChartData: getPieChartData(this.$themes),
      donutChartData: getDonutChartData(this.$themes),
      verticalBarChartData: getVerticalBarChartData(this.$themes),
      horizontalBarChartData: getHorizontalBarChartData(this.$themes),
    }
  },
  methods: {
    refreshData () {
      this.lineChartData = getLineChartData(this.$themes)
    },
  },
  // Ajout
  async mounted () {
    this.loaded = false
    try {
      axios.get('http://localhost:8080/reading/_size?filter={"device":"Random-Integer-Device"}', {
        auth: {
          username: 'admin',
          password: 'secret'
        }
      })
      .then(function (response) {
        //console.log(response.data._size);
        dataget = response.data._size;
        console.log("SIZE :  "+ dataget)
      })
      this.loaded = true

    } catch (e) {
      console.error(e)
    }
  },
  // Ajout 
}

// this is a test 
const getVerticalBarChartData = (themes) => ({
  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
  datasets: [
    {
      label: 'USA',
      backgroundColor: themes.primary,
      borderColor: 'transparent',
      data: null, 
    },
    {
      label: 'USSR',
      backgroundColor: themes.info,
      borderColor: 'transparent',
      // It doesn't work here for dataget value
      data: [dataget, 10, 22, 39, 15, 20, 85, 32, 60, 50, 20, 30],
    },
  ],
})
// This is a test 
</script>

<style lang="scss">
.chart-widget {
  .va-card__body {
    height: 550px;
  }
}
</style>
```

【问题讨论】:

  • 顺便说一句,console.log(dataget) 显示 76576
  • 问题出在verticalBarChartData

标签: javascript api vue.js axios chart.js


【解决方案1】:

问题在于axios.get 发出一个异步 HTTP 请求,并且只有在收到响应后(在 Promise.then() 函数内)才为变量 dataget 赋值。然而,该图表是在变量 dataget 仍未定义时创建的。

将位于两个 cmets 之间的整个代码块 // 这是一个测试移动到 Promise.then() 函数,就在以下代码行之后,它应该可以工作。

dataget = response.data._size;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2020-01-20
    • 2020-12-26
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多