javascript - 如何在 Vue 上下文中动态向条形图/饼图添加点?

标签 javascript highcharts vue.js

我想引导一个 Highcharts 条形图,然后向其中添加一些点(在 Vue 容器中)。文档提到addPoint() , setData()update() 作为实现这一目标的方法,但我尝试过的咒语都不起作用。

demo对于更新后的饼图,可以轻松使用 setData():

var chart = Highcharts.chart('container', {
  chart: {
    type: 'pie'
  },

  series: [{
    data: []
  }]
});


// the button action
$('#button').click(function() {
  chart.series[0].setData([129.2, 144.0, 176.0]);
});
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>

<div id="container" style="height: 400px"></div>
<button id="button" class="autocompare">Set new data</button>

我尝试在 Vue 上下文中复制此内容,但图表从未更新

var chart = Highcharts.chart('container', {
  chart: {
    type: 'pie'
  },

  series: [{
    data: []
  }]
});


new Vue({
  el: "#app",
  data: {},
  mounted() {
    chart.series[0].setData([129.2, 144.0, 176.0]);
    chart.redraw()
  }
})
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
  <div id="container" style="height: 400px"></div>
</div>

最佳答案

看来调用 Highlights.chart 会立即查询 DOM,因此在调用 Vue 的 mounted 回调之前执行此操作将会失败,因为该元素尚不存在。那,或者它会被 Vue 的渲染覆盖。相反,您需要在 Vue 安装后调用该函数。

作为奖励,这里有一个小演示(我玩得很开心),它展示了该库如何与 Vue 一起使用。它使用 watcher当相应的属性更改时重新绘制图表。

function createChart() {
  return Highcharts.chart('container', {
    chart: {
      type: 'pie'
    },
    series: [{
      data: []
    }]
  })
}


new Vue({
  el: "#app",
  data: {
    chartData: []
  },
  mounted() {
    this.chart = createChart()
    this.setData([100, 100, 100])
  },
  methods: {
    setData(data){
      this.chartData = data
    }
  },
  watch: {
    chartData(data) {
      this.chart.series[0].setData(data)
      this.chart.redraw()
    }
  }
})
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
  <button @click="setData([129.2, 144.0, 176.0])">Show First Dataset</button>
  <button @click="setData([180, 100.0, 20.0])">Show Second Dataset</button>
  <div id="container" style="height: 400px"></div>
</div>

关于javascript - 如何在 Vue 上下文中动态向条形图/饼图添加点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49571174/

相关文章:

javascript - highchart折线图最后一个空值不与折线连接

javascript - 如何在条形图中强制显示 yAxis 上的每个标签

javascript - 如何更新 Vue.JS 中的插槽

javascript - 如果类存在,则显示/隐藏类的 jQuery 按钮

javascript - Meteor:如何获取自定义跟踪系统的 IP 地址

javascript - 将哈巴狗转换为 Handlebars

javascript - 通过循环分配的 Highcharts 的系列名称和数据

html - Vue - 输入多个复选框

node.js - fatal error : CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory in production

javascript - ListView 上动态生成元素的单击事件