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