fix[Chart]: fixed chart bug in keep-alive

This commit is contained in:
Pan 2019-05-22 10:24:49 +08:00
parent 2f5c2eebcd
commit d2ab9137b8
5 changed files with 62 additions and 49 deletions

View File

@ -5,11 +5,12 @@
<script> <script>
import echarts from 'echarts' import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme require('echarts/theme/macarons') // echarts theme
import { debounce } from '@/utils' import resize from './mixins/resize'
const animationDuration = 6000 const animationDuration = 6000
export default { export default {
mixins: [resize],
props: { props: {
className: { className: {
type: String, type: String,
@ -33,18 +34,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.initChart() this.initChart()
}) })
this.__resizeHandler = debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)
window.addEventListener('resize', this.__resizeHandler)
}, },
beforeDestroy() { beforeDestroy() {
if (!this.chart) { if (!this.chart) {
return return
} }
window.removeEventListener('resize', this.__resizeHandler)
this.chart.dispose() this.chart.dispose()
this.chart = null this.chart = null
}, },

View File

@ -5,9 +5,10 @@
<script> <script>
import echarts from 'echarts' import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme require('echarts/theme/macarons') // echarts theme
import { debounce } from '@/utils' import resize from './mixins/resize'
export default { export default {
mixins: [resize],
props: { props: {
className: { className: {
type: String, type: String,
@ -48,39 +49,15 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.initChart() this.initChart()
}) })
if (this.autoResize) {
this.__resizeHandler = debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)
window.addEventListener('resize', this.__resizeHandler)
}
//
this.sidebarElm = document.getElementsByClassName('sidebar-container')[0]
this.sidebarElm && this.sidebarElm.addEventListener('transitionend', this.sidebarResizeHandler)
}, },
beforeDestroy() { beforeDestroy() {
if (!this.chart) { if (!this.chart) {
return return
} }
if (this.autoResize) {
window.removeEventListener('resize', this.__resizeHandler)
}
this.sidebarElm && this.sidebarElm.removeEventListener('transitionend', this.sidebarResizeHandler)
this.chart.dispose() this.chart.dispose()
this.chart = null this.chart = null
}, },
methods: { methods: {
sidebarResizeHandler(e) {
if (e.propertyName === 'width') {
this.__resizeHandler()
}
},
setOptions({ expectedData, actualData } = {}) { setOptions({ expectedData, actualData } = {}) {
this.chart.setOption({ this.chart.setOption({
xAxis: { xAxis: {

View File

@ -5,9 +5,10 @@
<script> <script>
import echarts from 'echarts' import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme require('echarts/theme/macarons') // echarts theme
import { debounce } from '@/utils' import resize from './mixins/resize'
export default { export default {
mixins: [resize],
props: { props: {
className: { className: {
type: String, type: String,
@ -31,18 +32,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.initChart() this.initChart()
}) })
this.__resizeHandler = debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)
window.addEventListener('resize', this.__resizeHandler)
}, },
beforeDestroy() { beforeDestroy() {
if (!this.chart) { if (!this.chart) {
return return
} }
window.removeEventListener('resize', this.__resizeHandler)
this.chart.dispose() this.chart.dispose()
this.chart = null this.chart = null
}, },

View File

@ -5,11 +5,12 @@
<script> <script>
import echarts from 'echarts' import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme require('echarts/theme/macarons') // echarts theme
import { debounce } from '@/utils' import resize from './mixins/resize'
const animationDuration = 3000 const animationDuration = 3000
export default { export default {
mixins: [resize],
props: { props: {
className: { className: {
type: String, type: String,
@ -33,18 +34,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.initChart() this.initChart()
}) })
this.__resizeHandler = debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)
window.addEventListener('resize', this.__resizeHandler)
}, },
beforeDestroy() { beforeDestroy() {
if (!this.chart) { if (!this.chart) {
return return
} }
window.removeEventListener('resize', this.__resizeHandler)
this.chart.dispose() this.chart.dispose()
this.chart = null this.chart = null
}, },

View File

@ -0,0 +1,54 @@
import { debounce } from '@/utils'
export default {
data() {
return {
$_sidebarElm: null
}
},
mounted() {
this.$_initResizeEvent()
this.$_initSidebarResizeEvent()
},
beforeDestroy() {
this.$_destroyResizeEvent()
this.$_destroySidebarResizeEvent()
},
activated() {
this.$_initResizeEvent()
this.$_initSidebarResizeEvent()
},
deactivated() {
this.$_destroyResizeEvent()
this.$_destroySidebarResizeEvent()
},
methods: {
// use $_ for mixins properties
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
$_sidebarResizeHandler(e) {
if (e.propertyName === 'width') {
this.$_resizeHandler()
}
},
$_resizeHandler() {
return debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)()
},
$_initResizeEvent() {
window.addEventListener('resize', this.$_resizeHandler)
},
$_destroyResizeEvent() {
window.removeEventListener('resize', this.$_resizeHandler)
},
$_initSidebarResizeEvent() {
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
},
$_destroySidebarResizeEvent() {
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
}
}
}