Vue.js组件中的Highcharts

Die*_*art 4 javascript highcharts vue.js

我正在尝试使用Highcharts和Vue.js创建图形组件.我想传递要由Highcharts使用的元素的id属性,但是我无法获取该属性.

如何动态设置id?

这是HTML:

<objective-chart :element="'brick-chart'"></objective-chart>
Run Code Online (Sandbox Code Playgroud)

和javascript代码:

<template>
    <div id="{{element}}"></div>
</template>

<script>
    import Highcharts from 'highcharts';
    export default{
        props: ['element'],
        ready(){
            $(function () {

                new Highcharts.Chart({
                    chart: {
                        renderTo: this.element,
                        type: 'bar',
                        height: 200,
                        margin: [0, 20, 0, 40]
                    },
                    title: {
                        text: null
                    },
                    xAxis: {

                        lineColor: null,
                        labels: {
                            rotation: -90
                        },
                        categories: [
                            'Brick'
                        ]
                    },
                    yAxis: [{

                        min: 0,
                        max:100,
                        endOnTick: true,
                        maxPadding: 0.02,
                        gridLineColor: null,

                        title: {
                            text: null
                        },
                        labels: {
                            y: -50
                        },


                    }],
                    legend: {
                        shadow: false,
                        verticalAlign: 'bottom'
                    },
                    tooltip: {
                        shared: true,
                        followPointer: true
                    },
                    plotOptions: {
                        column: {
                            grouping: true,
                            shadow: false,
                            borderWidth: 0
                        }
                    },
                    credits: {
                        enabled: false
                    },
                    series: [{
                        name: 'Objetivo',
                        color: 'rgba(224,224,224,1)',
                        data: [100],
                        pointPadding: 0.3,
                        pointPlacement: -0.2
                    }, {
                        name: 'Realizado',
                        color: 'rgba(106,166,46,.9)',
                        data: [76],
                        pointPadding: 0.4,
                        pointPlacement: 0.1
                    }, {
                        type:'spline',
                        name: 'Projeção',
                        color: 'rgba(106,166,46,.9)',
                        top: 10,
                        pointPlacement: -0.05,
                        data: [95],
                        marker: {
                            radius: 8,
                            lineColor: '#666666',
                            lineWidth: 1
                        }
                    }]
                });
            });
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

Tod*_*.Lu 17

vue.js 2.0示例(Vue开始使用虚拟dom):
1)npm install highcharts
2)var Highcharts = require('highcharts');
3 Highcharts.chart(.这个.$ el, {...})"已安装"方法中因为this.$el"已安装"之前不可用
4)应在" beforeDestroy "中销毁highcharts的实例"方法.

<template>
	<div><div>
</template>

<script>
var Highcharts = require('highcharts');
export default {
    name : "Chart",
    props : {
      series : {
        type: Array,
        required: true
      }
	},
  	data : function() {
      return {
        target: undefined
      }
    },
    mounted : function() {
      this.target = Highcharts.chart(this.$el, {
        title: {
          text: 'Monthly Average Temperature',
          x: -20 //center
        },
        subtitle: {
          text: 'Source: WorldClimate.com',
          x: -20
        },
        xAxis: {
          categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        yAxis: {
          title: {
          text: 'Temperature (°C)'
        },
        plotLines: [{
          value: 0,
          width: 1,
          color: '#808080'
        }]
      },
      tooltip: {
        valueSuffix: '°C'
      },
      legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'middle',
  	        borderWidth: 0
      },
      series: this.series
    });
  },
  beforeDestroy: function() {
    this.target.destroy();
  },
}
</script>
Run Code Online (Sandbox Code Playgroud)

而父组件是:

<template>
  <div id="app">
    <h1>{{ msg }}</h1>
    <Chart :series = "initSeries"></Chart>
  </div>
</template>

<script>
import Chart from './Chart.vue';
export default {
  name: 'app',
  components : {Chart},
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
    }
  },
  computed : {
    initSeries : function() {
      return [{
              name: 'Tokyo',
              data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
          }, {
              name: 'New York',
              data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
          }, {
              name: 'Berlin',
              data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
          }, {
              name: 'London',
              data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
          }];
    }
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)


Jef*_*eff 5

编辑:从@ Tody.Lu检查Vue 2示例,这是一个很好的解决方案

您需要使用renderTo: "#" + this.element来获取格式正确的ID选择器。

我相信您也可以renderTo: this.$el完全不用ID 就可以使用。

编辑:我检查了我的Highcharts组件,这就是我的方法:

$(this.$el).highcharts(data);
Run Code Online (Sandbox Code Playgroud)

这样就不需要ID。

  • 基于他们提供的文档,我认为您不需要。`renderTo`自动假定您正在传递一个`id`标识符。http://jsfiddle.net/wutkLwtt/ (2认同)