vue封装的echarts组件被同一个页面多次引用无法正常显示问题(已解决)

问题:第二张图显示空白,折线图并没有展示出来

在这里插入图片描述
当我们在封装了echarts组件之后,需要在同一个页面中引入多次时,会出现数据覆盖等一系列问题
当时我是修改了id也无济于事,达不到我需要的效果

解决方案

将我们封装的组件中的id选择器删掉,换成ref,下面是组件修改部分

<template>
  <div>
    <div class="chart" ref="Echart"></div>
  </div>
</template>

初始化时我们将

this.charts = echarts.init(document.getElementById(echarts));

更改为

 // 创建 echarts 实例。
  this.myChartOne = echarts.init(this.$refs.Echart);

然后就可以在页面中重复引入啦

正确显示:

在这里插入图片描述

完整代码:

echarts组件:

<template>
  <div
    class="chart"
    ref="Echart"
    :style="{ width: '240px', height: '200px' }"
  ></div>
</template>

<script>
export default {
  name: "lineChart",
  props: {
    //接受父组件传递来的数据
    labelList: Array,
    xAxisList: Array,
  },
  data() {
    return {};
  },
  watch: {
    labelList: function (newQuestion, oldQuestion) {
      this.initChart();
    },
  },
  mounted() {
    this.init();
    this.initChart();
  },
  methods: {
    init() {
      const self = this; //因为箭头函数会改变this指向,指向windows。所以先把this保存
      setTimeout(() => {
        window.addEventListener("resize", function () {
          self.chart = self.$echarts.init(self.$refs.Echart);
          self.chart.resize();
        });
      }, 10);
    },
    initChart() {
      // 创建 echarts 实例。
      var myChartOne = this.$echarts.init(this.$refs.Echart);
      myChartOne.setOption({
        //直角坐标系内绘图网格
        grid: {
          top: "5%",
          left: "3%", //grid 组件离容器左侧的距离
          right: "4%",
          bottom: "3%",
          containLabel: true, //grid 区域是否包含坐标轴的刻度标签
        },
        // 如果有多个同类组件,那么就是个数组。例如这里有三个 X 轴。
        xAxis: {
          type: "category",
          data: this.xAxisList,
          name: "data",
          axisLine: {
            show: false, //隐藏x轴线
            lineStyle: {
              color: "#ffffff",
            },
          },
          axisTick: {
            show: false, //隐藏x轴刻度
          },
        },

        yAxis: {
          type: "value",
          axisLine: {
            show: false,
            lineStyle: {
              color: "#ffffff",
            },
          },
          axisTick: {
            show: false, //隐藏y轴刻度
          },
          splitLine: {
            lineStyle: {
              // 设置背景横线
              color: "#BBBBBB",
            },
          },
        },
        series: [
          {
            data: this.labelList,
            type: "line",
            // smooth: true, //默认是false,判断折线连线是平滑的还是折线
            itemStyle: {
              normal: {
                color: "#FDE708", //改变折线点的颜色
                lineStyle: {
                  color: "#FDE708", //改变折线颜色
                },
              },
            },
          },
        ],
      });
    },
  },
};
</script>

页面引入及使用

        <!-- 冷藏区 -->
          <div class="bkChart">
            <lineChart :labelList="labelList" :xAxisList="xAxiscoldAreaList" />
          </div>
        <!-- 回温区 -->
          <div class="bkChart">
            <lineChart :labelList="labelList" :xAxisList="xAxisHotAreaList" />
          </div>

因为重复使用的两次echarts数据不同,data中我写入两组数据

<script>
import lineChart from "../../../components/Echarts/lineChart.vue";
export default {
  components: {
    lineChart,
  },
   data() {
    return {
      xAxiscoldAreaList: ["2", "4", "6", "8", "10", "12"],
      xAxisHotAreaList: ["2", "4", "6", "8", "10", "12"],
      coldAreaList: ["3", "5", "7", "10", "4", "6"],
      hotAreaList: ["6", "3", "5", "8", "10", "6"],
    };
  },
 } 
</script>

这样就可以在同一个页面中重复多次的引入封装的echarts组件啦!!!

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,可以通过自定义组件的方式来实现在同一个页面中复用同一个echarts组件。 首先,我们需要创建一个echarts组件。可以使用Vue的单文件组件(.vue)来定义组件,例如创建一个名为EchartsComponent.vue的文件。 在EchartsComponent.vue文件中,我们可以使用echarts的官方库或者其他echarts封装库来引入echarts,并在组件中渲染echarts图表。 代码示例(EchartsComponent.vue): ``` <template> <div> <div ref="chart" style="width: 400px; height: 400px;"></div> </div> </template> <script> import echarts from 'echarts'; export default { mounted() { this.renderChart(); }, methods: { renderChart() { // 使用echarts库的API来渲染echarts图表 const chart = echarts.init(this.$refs.chart); // 图表配置 const options = { // ... }; // 渲染图表 chart.setOption(options); } } }; </script> ``` 接下来,在需要使用echarts图表页面中,我们可以通过引入EchartsComponent.vue组件来复用echarts组件。 代码示例(App.vue): ``` <template> <div> <!-- 第一次使用echarts组件 --> <echarts-component></echarts-component> <!-- 第二次使用echarts组件 --> <echarts-component></echarts-component> </div> </template> <script> import EchartsComponent from './EchartsComponent.vue'; export default { components: { EchartsComponent } }; </script> ``` 在App.vue中,我们通过`<echarts-component></echarts-component>`的方式引入EchartsComponent组件,从而实现在同一个页面中复用同一个echarts组件。 当页面渲染时,EchartsComponent组件会根据自身的`mounted()`方法中的代码来初始化echarts图表并渲染到页面中。 通过这种方式,我们可以在同一个页面多次使用EchartsComponent组件,从而实现复用同一个echarts组件的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值