mirror of
				https://github.com/KevinMidboe/vue-chartjs.git
				synced 2025-10-29 18:00:20 +00:00 
			
		
		
		
	✨ Add dynamic styles and css classes as prop
You can now pass in css classes as a string for the surrounding div of the canvas and a styles object which will be applied as inline styles.
This way you can have a dynamic height with `reposnive: true`
## Example
```js
<template>
   <line-chart :styles="myStyles"/>
</template>
<script>
export default {
  data () {
    return {
          height: 100
    }
  },
  computed: {
    myStyles () {
      return {
        height: `${this.height}px`,
        position: 'relative'
      }
    }
  }
}
</script>
```
			
			
This commit is contained in:
		| @@ -71,7 +71,8 @@ There are some basic props defined in the BaseCharts. Because you `extend()` the | |||||||
| | width | chart width | | | width | chart width | | ||||||
| | height | chart height | | | height | chart height | | ||||||
| | chart-id | id of the canvas | | | chart-id | id of the canvas | | ||||||
|  | | css-classes | String with css classes for the surrounding div | | ||||||
|  | | styles | Object with css styles for the surrounding div container | | ||||||
|  |  | ||||||
| ## Examples | ## Examples | ||||||
|  |  | ||||||
| @@ -176,7 +177,8 @@ export default Line.extend({ | |||||||
|   mixins: [reactiveProp], |   mixins: [reactiveProp], | ||||||
|   props: ['options'], |   props: ['options'], | ||||||
|   mounted () { |   mounted () { | ||||||
|     // this.chartData is created in the mixin |     // this.chartData is created in the mixin. | ||||||
|  |     // If you want to pass options please create a local options object | ||||||
|     this.renderChart(this.chartData, this.options) |     this.renderChart(this.chartData, this.options) | ||||||
|   } |   } | ||||||
| }) | }) | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -20,7 +23,6 @@ export default Vue.extend({ | |||||||
|       ] |       ] | ||||||
|     ) |     ) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   props: { |   props: { | ||||||
|     chartId: { |     chartId: { | ||||||
|       default: 'bar-chart', |       default: 'bar-chart', | ||||||
| @@ -33,9 +35,22 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   data () { |   data () { | ||||||
|     return { |     return { | ||||||
|       defaultOptions: { |       defaultOptions: { | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,10 @@ import { mergeOptions } from '../helpers/options' | |||||||
| export default Vue.extend({ | export default Vue.extend({ | ||||||
|   render: function (createElement) { |   render: function (createElement) { | ||||||
|     return createElement( |     return createElement( | ||||||
|       'div', |       'div', { | ||||||
|  |         style: this.styles, | ||||||
|  |         class: this.cssClasses | ||||||
|  |       }, | ||||||
|       [ |       [ | ||||||
|         createElement( |         createElement( | ||||||
|           'canvas', { |           'canvas', { | ||||||
| @@ -33,6 +36,20 @@ export default Vue.extend({ | |||||||
|     height: { |     height: { | ||||||
|       default: 400, |       default: 400, | ||||||
|       type: Number |       type: Number | ||||||
|  |     }, | ||||||
|  |     cssClasses: { | ||||||
|  |       type: String, | ||||||
|  |       default: '' | ||||||
|  |     }, | ||||||
|  |     styles: { | ||||||
|  |       type: Object, | ||||||
|  |       default () { | ||||||
|  |         return { | ||||||
|  |           width: '100%', | ||||||
|  |           height: '200%', | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="container"> |   <div class="container"> | ||||||
|     <div class="Chart"> |     <div class="Chart"> | ||||||
|       <h1 style="text-align:center;">Barchart</h1> |       <h1 style="text-align:center;">Barchart</h1> <button @click="increaseHeight()">Increase</button> | ||||||
|       <bar-example></bar-example> |       <bar-example :styles="myStyles"></bar-example> | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|     <div class="Chart"> |     <div class="Chart"> | ||||||
| @@ -79,7 +79,8 @@ | |||||||
|     }, |     }, | ||||||
|     data () { |     data () { | ||||||
|       return { |       return { | ||||||
|         dataPoints: null |         dataPoints: null, | ||||||
|  |         height: 20 | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     mounted () { |     mounted () { | ||||||
| @@ -88,6 +89,9 @@ | |||||||
|       }, 2000) |       }, 2000) | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |       increaseHeight () { | ||||||
|  |         this.height += 10 | ||||||
|  |       }, | ||||||
|       getRandomInt () { |       getRandomInt () { | ||||||
|         return Math.floor(Math.random() * (50 - 5 + 1)) + 5 |         return Math.floor(Math.random() * (50 - 5 + 1)) + 5 | ||||||
|       }, |       }, | ||||||
| @@ -103,6 +107,14 @@ | |||||||
|           ] |           ] | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     computed: { | ||||||
|  |       myStyles () { | ||||||
|  |         return { | ||||||
|  |           height: `${this.height}px`, | ||||||
|  |           position: 'relative' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| </script> | </script> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user