c3.js 使用 vue.js 加载远程数据时图表不更新

c3.js chart doesn't update when loading remote data using vue.js

目前我有一个使用 vue 和 c3 的组件。 c3 图表立即呈现,但我仍在通过 ajax 获取数据。如何延迟组件的渲染?或者一旦数据被获取然后显示图表。

我的代码非常简单。

<my-chart :chartdata="chart.data"></my-chart> etc.

注意:如果我输入静态数据 - 它会完美呈现。

JSFIDDLE https://jsfiddle.net/1o4kqjwd/3/

首先,将 v-if 指令添加到 <my-chart> 标记,以便仅在加载数据(mydata,在您的 fiddle 中)时呈现它:

<my-chart :chartdata="mydata" v-if="mydata"></my-chart>

其次,在 my-chart 的组件定义中,您需要向 mydata 添加一个 watcher 以调用渲染方法(drawChart(),在您的 fiddle 中)每当 mydata 发生变化时:

watch: {
  mydata() {
    this.drawChart();
  }
},

最后,您可以将 ajax 调用放在父 Vue 定义的自己的方法中。这样,您可以在 mounted() 生命周期挂钩中调用它,然后从该实例范围内的任何地方调用它:

methods: {
  fetchData() {
    var self = this;  

    this.$http.get('yoururl').then(function(response) {
      let chartData = response.data;

      // do any formatting to chartData here

      self.data = chartData;
    })
  }
}