Skip to content

Commit fbad7f4

Browse files
authored
fix[Charts]: fix charts resize in keep-alive bug (PanJiaChen#2922)
* fix[Charts]: fix charts resize in keep-alive bug * refine
1 parent 088f64e commit fbad7f4

File tree

1 file changed

+35
-13
lines changed

1 file changed

+35
-13
lines changed

src/components/Charts/mixins/resize.js

+35-13
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,54 @@ import { debounce } from '@/utils'
33
export default {
44
data() {
55
return {
6-
$_sidebarElm: null
6+
$_sidebarElm: null,
7+
$_resizeHandler: null
78
}
89
},
910
mounted() {
10-
this.__resizeHandler = debounce(() => {
11-
if (this.chart) {
12-
this.chart.resize()
13-
}
14-
}, 100)
15-
window.addEventListener('resize', this.__resizeHandler)
11+
this.initListener()
12+
},
13+
activated() {
14+
if (!this.$_resizeHandler) {
15+
// avoid duplication init
16+
this.initListener()
17+
}
1618

17-
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
18-
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
19+
// when keep-alive chart activated, auto resize
20+
this.resize()
1921
},
2022
beforeDestroy() {
21-
window.removeEventListener('resize', this.__resizeHandler)
22-
23-
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
23+
this.destroyListener()
24+
},
25+
deactivated() {
26+
this.destroyListener()
2427
},
2528
methods: {
2629
// use $_ for mixins properties
2730
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
2831
$_sidebarResizeHandler(e) {
2932
if (e.propertyName === 'width') {
30-
this.__resizeHandler()
33+
this.$_resizeHandler()
3134
}
35+
},
36+
initListener() {
37+
this.$_resizeHandler = debounce(() => {
38+
this.resize()
39+
}, 100)
40+
window.addEventListener('resize', this.$_resizeHandler)
41+
42+
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
43+
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
44+
},
45+
destroyListener() {
46+
window.removeEventListener('resize', this.$_resizeHandler)
47+
this.$_resizeHandler = null
48+
49+
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
50+
},
51+
resize() {
52+
const { chart } = this
53+
chart && chart.resize()
3254
}
3355
}
3456
}

0 commit comments

Comments
 (0)