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:
Jakub Juszczak
2017-07-31 21:42:48 +02:00
parent e0c771f3d3
commit 32229fbfdd
11 changed files with 181 additions and 16 deletions

View File

@@ -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)
} }
}) })

View File

@@ -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: {

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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'
}
}
} }
}, },

View File

@@ -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>