在vue3中使用echarts不显示tooltip问题

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

Vue 2中,结合ECharts库来实现地图上 tooltip显示并展示后端数据,你需要经过以下几个步骤: 1. **安装依赖**:首先需要安装EChartsVue相关的插件如vue-echarts。可以使用npm或yarn命令: ``` npm install echarts vue-echarts axios ``` 2. **引入组件**:在项目中创建一个名为`MapTooltip.vue`的文件,导入EChartsVue-ECharts以及axios用于异步获取数据: ```html <template> <div ref="chart"></div> </template> <script> import ECharts from &#39;echarts&#39;; import { VueECharts } from &#39;vue-echarts&#39;; export default { components: { VueECharts, }, data() { return { mapData: null, // 存放后端返回的地图数据 chartInstance: null, }; }, mounted() { this.fetchData(); }, methods: { fetchData() { axios.get(&#39;你的后端API地址&#39;) // 替换为实际后端接口 .then(response => { this.mapData = response.data; // 将数据赋值给mapData this.renderChart(); }) .catch(error => console.error(error)); }, renderChart() { const myChart = this.$refs.chart; const option = { // 地图配置选项,包括地理坐标系统等 }; if (this.mapData) { option.series[0].data = this.mapData; // 链接地图数据到tooltip this.chartInstance = ECharts.init(myChart); this.chartInstance.setOption(option); this.chartInstance.on(&#39;click&#39;, this.handleTooltip); // 点击事件触发tooltip显示 } }, handleTooltip(event) { // 根据event参数,动态生成并显示对应的数据在tooltip上 }, }, }; </script> ``` 3. **处理tooltip内容**:在`handleTooltip`方法中,你可以根据点击地图的数据点,从`mapData`中提取出相应的信息,然后设置tooltip的内容。 4. **样式调整**:为了定制tooltip的样式,可以在ECharts的`option`里添加`tooltip`部分,并自定义其样式属性,如`formatter`函数来控制显示的具体内容。 5. **注意事项**: - 如果地图数据是以特定格式存储,可能需要先解析转换成ECharts支持的数据结构。 - 保持与后端API的响应格式一致,以便于正确获取和解析数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值