在vue3中发现无法出现tooltip,点击顶部示例无法更新问题

问题描述

最近在Vue3项目中使用ECharts5.0制作统计图表,发现配置一切正常,但是tooltip无论如何就是无法显示,所以排查了下原因,发现是ECharts与Vue的响应性特性存在兼容性问题。

问题原因

ECharts在Vue3环境下,使用ECharts5.0+版本会出现该问题。原因是echarts实例不能由Vue来维护(Vue的响应性特性)。
原因: 因vue3中使用了Proxy对象代理,但echarts中使用了大量的===造成对比失败。

处理办法:对Proxy对象进行拆箱。
此时在代码中添加

const unwarp = (obj) => obj && (obj.__v_raw || obj.valueOf() || obj);

在setOption时

unwarp(this.chartObj).setOption(optionData, true);

全部代码如下

<template>
  <div class="basicCharts" ref="_chart"></div>
</template>

<script>

const unwarp = (obj) => obj && (obj.__v_raw || obj.valueOf() || obj);
export default {
  name: "basicCharts",
  props: {

  },
  data() {
    return {
      chartObj: null,
    };
  },
  mounted() {
    this.initChart();
  },
  destroyed() {
    this.chartObj && this.chartObj.dispose();
    window.removeEventListener("resize", this.resizeChart);
  },
  methods: {
    initChart() {
      this.chartObj = this.$echarts.init(this.$refs._chart);
      window.addEventListener("resize", this.resizeChart);
    },
    updateChart(optionData) {
      console.log(optionData)
      unwarp(this.chartObj).setOption(optionData, true);
    },
    resizeChart() {
      this.chartObj && this.chartObj.resize();
    },
  },
};
</script>

<style lang="scss" scoped>
.basicCharts {
  width: 750px;
  height: 400px;
  // width: 100%;
  // height: 100%;
  
}
</style>

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐