Echart在vue3.0中 resize的坑

Echart在vue3.0中 resize的坑

import { defineComponent, h } from 'vue'
const CHART_INSTANCES = new WeakMap<Object, ECharts | null>()

const HChart = defineComponent({
   methods: {
	  initChart (el: HTMLDivElement): Promise<ECharts> {
	    const renderer = this.renderer || 'canvas'
	    return new Promise((resolve) => {
	      this.$nextTick(() => {
	        const currentTheme = this.theme || defaultTheme
	        // 设置主题
	        echarts.registerTheme(currentTheme.name, currentTheme.value)
	        // 好坑啊 CHART_INSTANCE 不能做代理proxy 也就是说 echart 实例不能放在 data 里面 不然 resize 会报错。。。。。
	        CHART_INSTANCES.set(this, echarts.init(el, currentTheme.name, {
	          renderer,
	          width: 'auto',
	          height: 'auto'
	        }))
	        resolve(CHART_INSTANCES.get(this)!)
	      })
	    })
  },
  // .....
},
  render () {
    const { style } = this
    const initStyle = Object.assign({}, defaultStyle, style || {})

    return h('div', {
      style: initStyle
    })
  }
})

export default HChart
  • 在vue3.0把 echarts实例 赋值的变量放在data做了proxy代理,resize的时候报不知名的错误(有哪位大佬知道原因了告诉下小弟)
  • 因为想把echarts封装成组件,刚好看到vue3.0原理里面使用 WeakMap 做代码的映射,这样就保证每个echarts 实例都是唯一的,并且还容易取值,销毁等操作。

详细代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值