mirror of
				https://github.com/KevinMidboe/vue-chartjs.git
				synced 2025-10-29 18:00:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import Vue from 'vue'
 | |
| import Chart from 'chart.js'
 | |
| import { mergeOptions } from '../helpers/options'
 | |
| 
 | |
| export default Vue.extend({
 | |
|   render: function (createElement) {
 | |
|     return createElement(
 | |
|       'div', {
 | |
|         style: this.styles,
 | |
|         class: this.cssClasses
 | |
|       },
 | |
|       [
 | |
|         createElement(
 | |
|           'canvas', {
 | |
|             attrs: {
 | |
|               id: this.chartId,
 | |
|               width: this.width,
 | |
|               height: this.height
 | |
|             },
 | |
|             ref: 'canvas'
 | |
|           }
 | |
|         )
 | |
|       ]
 | |
|     )
 | |
|   },
 | |
|   props: {
 | |
|     chartId: {
 | |
|       default: 'bar-chart',
 | |
|       type: String
 | |
|     },
 | |
|     width: {
 | |
|       default: 400,
 | |
|       type: Number
 | |
|     },
 | |
|     height: {
 | |
|       default: 400,
 | |
|       type: Number
 | |
|     },
 | |
|     cssClasses: {
 | |
|       type: String,
 | |
|       default: ''
 | |
|     },
 | |
|     styles: {
 | |
|       type: Object,
 | |
|       default () {
 | |
|         return {
 | |
|           width: '100%',
 | |
|           height: '100%',
 | |
|           position: 'relative'
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   data () {
 | |
|     return {
 | |
|       defaultOptions: {
 | |
|         scales: {
 | |
|           yAxes: [{
 | |
|             ticks: {
 | |
|               beginAtZero: true
 | |
|             },
 | |
|             gridLines: {
 | |
|               display: false
 | |
|             }
 | |
|           }],
 | |
|           xAxes: [ {
 | |
|             gridLines: {
 | |
|               display: false
 | |
|             },
 | |
|             categoryPercentage: 0.5,
 | |
|             barPercentage: 0.2
 | |
|           }]
 | |
|         }
 | |
|       },
 | |
|       plugins: []
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   methods: {
 | |
|     addPlugin (plugin) {
 | |
|       this.plugins.push(plugin)
 | |
|     },
 | |
|     renderChart (data, options) {
 | |
|       let chartOptions = mergeOptions(this.defaultOptions, options)
 | |
|       this._chart = new Chart(
 | |
|         this.$refs.canvas.getContext('2d'), {
 | |
|           type: 'bar',
 | |
|           data: data,
 | |
|           options: chartOptions,
 | |
|           plugins: this.plugins
 | |
|         }
 | |
|       )
 | |
|     }
 | |
|   },
 | |
|   beforeDestroy () {
 | |
|     if (this._chart) {
 | |
|       this._chart.destroy()
 | |
|     }
 | |
|   }
 | |
| })
 |