📜  vuejs 我的图表在获取数据之前加载 - Javascript (1)

📅  最后修改于: 2023-12-03 15:35:38.965000             🧑  作者: Mango

Vue.js: 如何在获取数据之前加载我的图表?

在Vue.js中,我们能够轻松地使用第三方图表库(比如Chart.js、Highcharts等)来展示数据。但是,在获取数据之前,图表可能会显示为空白,对于用户来说这是一个非常差的体验。为了避免这种情况,我们可以采取下面的两种方式来加载我们的图表。

方式一:使用v-if

Vue.js提供了一个指令v-if,我们可以使用它来在数据加载完毕之前先隐藏图表,等到数据加载完毕之后再显示图表。代码如下:

<template>
  <div>
    <div v-if="loading">Loading...</div>
    <canvas v-else ref="chart"></canvas>
  </div>
</template>

<script>
import Chart from "chart.js";
export default {
  data() {
    return {
      loading: true,
      chartData: {
        // 这里是图表的数据
      },
    };
  },
  mounted() {
    // 这里是获取数据的代码
    axios.get("/data").then((response) => {
      this.chartData = response.data;
      this.loading = false;
      this.renderChart();
    });
  },
  methods: {
    renderChart() {
      const ctx = this.$refs.chart.getContext("2d");
      new Chart(ctx, {
        // 这里是配置图表的代码
        data: this.chartData,
      });
    },
  },
};
</script>

在上面的代码中,我们使用v-if指令来根据loading变量来控制是否显示“Loading...”文本。当loadingtrue时,显示文本;当loadingfalse时,显示图表。

方式二:使用v-show

除了v-if指令之外,Vue.js还提供了一个指令v-show,我们可以使用它来在数据获取之前先显示一个空的图表,等到数据获取到之后再更新图表。代码如下:

<template>
  <div>
    <canvas ref="chart" v-show="!loading"></canvas>
  </div>
</template>

<script>
import Chart from "chart.js";
export default {
  data() {
    return {
      loading: true,
      chartData: {
        // 这里是图表的数据
      },
      chartObj: null,
    };
  },
  mounted() {
    this.renderChart();
    this.getData();
  },
  methods: {
    getData() {
      axios.get("/data").then((response) => {
        this.chartData = response.data;
        this.loading = false;
        this.chartObj.update();
      });
    },
    renderChart() {
      const ctx = this.$refs.chart.getContext("2d");
      this.chartObj = new Chart(ctx, {
        // 这里是配置图表的代码
        data: this.chartData,
      });
    },
  },
};
</script>

在上面的代码中,我们使用v-show指令来根据loading变量来控制图表的显示和隐藏。当loadingtrue时,显示空的图表;当loadingfalse时,更新图表为获取到的数据。

总结

以上就是两种在Vue.js中在获取数据之前加载图表的方法。使用v-if或者v-show都能够达到目的,具体选择哪一个方法需要根据实际情况来决定。