vue踩坑记录-echarts的使用

997 阅读2分钟

1. 图表重叠混乱

情景1:下拉框切换echarts图表,但是图表重叠混乱

💬原因:没有clear重置

解决: true或者clear两种写一种就行

  • myChart.clear()

  • myChart.setOption(option, true)

    设置为true的话,就是notMerge,不合并,false的话,就Merge,之前的东西还保留

image.png

情景2:还有一重情况用clear也能解决 即快速切换tab 提示框未消失 此时用clear也能清除

image.png

2. 找不到dom元素

报错TypeError: Cannot read property 'getAttribute' of undefined,外层的div加了一个v-if/v-else的判断 方法里的refs就获取不到实例了

💬原因:mounted加载阶段,v-if把dom干掉了,在mounted阶段dom根本不存在(第一次渲染active是0 在第一个tab,所以没渲染出来,除非我一上来就给active默认为第三个,那么渲染的时候v-if成立,拿到refs)

解决:改用v-show,让初次渲染的时候dom就存在

image.png

3. 图标没数据怎么显示“暂无数据”

如果什么都没做,那么没数据的时候 还是会显示之前的数据之外的配置

image.png

解决: 使用showLoading来遮盖 image.png

 if (没有数据的情况) {
        this.myChart.showLoading({
          text: '暂无数据',
          color: '#ffffff',
          textColor: '#8a8e91',
          maskColor: 'rgba(255, 255, 255, 1)',
        })
      }
      
      
      
 //接口请求完的地方关闭遮罩
  async getcompleteDetail (type) {
      const re = await getcompleteDetail(params)
      this.activityListinComplete = re.data
      if (re.msg == '执行成功') {
        this.myChart.hideLoading()
      }
    },
      

4. 关于echarts的resize方法

resize可以监听网页resize事件后直接调用,也可以在resize方法中设置echarts DOM的高度

(a) 让echarts的div自适应高度-数据太多图表重叠

问题:如果给echarts的这个dom设置死宽高,那么如果数据太多的时候会因为展不开重叠在一起

image.png image.png

解决:取消dom的高度设置,从而给echarts的实例resieze方法动态设置高度


 this.myChart = echarts.init(this.$refs.mycharts)
 this.myChart.resize({ height: this.activityName.length * 35 + 250 })//👈 
 //this.activityName.length  是活动数组的长度  
 //35为每个活动条数的高度

 var option = {...}
  
 if (没有数据的情况) {
        this.myChart.showLoading({
          text: '暂无数据',
          color: '#ffffff',
          textColor: '#8a8e91',
          maskColor: 'rgba(255, 255, 255, 1)',
        })
 } 
 this.myChart.clear()
 this.myChart.setOption(option)
  

(b) 整个echarts响应式变化大小

image.png


window.addEventListener('resize', this.resizeEcharts)
resizeEcharts () {
      if (document.getElementById(`mycharts`)) {
        this.$nextTick(() => {
          this.$echarts.init(document.getElementById(`mycharts`)).resize()
        })
      }
    },


#mycharts {
  min-width: 342px;
  max-width: 400px;
  min-height: 330px;
  margin-left: 44px;
  background: #ffffff;
  box-shadow: 0px 0px 6px 0px rgba(38, 44, 71, 0.16);
  border-radius: 10px;
}

5. pie-环形图特殊样式写法记录

image.png

默认样式是 label显示在中间 且只有数据名

通过fotmatter可以控制要显示的数据 但是效果只是水平且不能分段设置样式

image.png

💬 结合rich符文本分段设置样式 以及对应的formatter获取想要的数据


          series: [
            {
              type: 'pie',
              radius: ['40%', '60%'],
              
              label: {
                show: false,
                position: 'center',
                formatter: [
                  '{x|{c}%}',  // 使用x样式|对应文字
                  '{a|{b}}'    //结合上述formatter要求 需要加{}才能显示需要的数值和数据名
                ].join('\n'),  //换行使用 '\n'。

                rich: {
                  a: {
                    color: 'rgba(0, 0, 0, 0.45)',
                    lineHeight: 14,
                    fontSize: 14,
                  },
                  x: {
                    fontSize: 30,
                    lineHeight: 30,
                    color: '#000000',

                  },
                }
              },
              data: this.chartData,
            }
          ]

6. 滚动条

问题:数据多,X轴放不下,柱状图产生堆叠。

解决:dataZoom设置滚动条,但不要具有初始的缩放效果

image.png

 dataZoom: [ //给x轴设置滚动条
          {
            start: 0,//默认为0  
            end: 100 / (X轴数组.length / 10),//默认为100  
            type: 'slider',
            show: true,
            xAxisIndex: [0],
            handleSize: 0,//滑动条的 左右2个滑动条的大小  
            height: 8,//组件高度  
            left: 50, //左边的距离  
            right: 40,//右边的距离  
            bottom: 26,//右边的距离  
            handleColor: '#ddd',//h滑动图标的颜色  
            handleStyle: {
              borderColor: "#cacaca",
              borderWidth: "1",
              shadowBlur: 2,
              background: "#ddd",
              shadowColor: "#ddd",
            },
       
          },
          {  //这个属性是里面拖拽
            type: 'inside',
            show: true,
            xAxisIndex: [0],
            start: 0,//默认为1  
            end: 100 / (X轴数组.length / 10),//默认为100 ,
            zoomOnMouseWheel: false, //不允许鼠标缩放
          },

        ],

7.bar基本配置

image.png

柱状图渐变色

   series: [
          {
            name: '生产数量',
            type: 'bar',
            data: this.productNo,
            itemStyle: {  // here
              color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: '#307cd0' },
                { offset: 0.5, color: '#2667a6' },
                { offset: 1, color: '#123148' },
              ]),
            },
          },
          {
            name: '合格数量',
            type: 'bar',
            data: this.passNo,
            itemStyle: {  // here
              color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: '#26d1ad' },
                { offset: 0.5, color: '#20a18d' },
                { offset: 1, color: '#123148' },
              ]),
            },
          },
        ],