目录
  • 前言
  • 原因分析
  • 解决方式
    • 一、nextTick
    • 二、setInterval
  • 总结

    前言

    弹出层中插入echarts图表,没有报错,但是图表加载不出来

    此弹出层没有用element 的dialog 对话框,用的自己封装的组件,但是出现的问题是一样的

    原因分析

    弹出层 的内容是懒渲染的,即在第一次被打开之前,传入的默认 slot 不会被渲染到 DOM 上。

    弹出层组件会监听 visible 的状态,当状态为 true 时,立刻触发 open 事件,但这个时候 弹出层 的内容还没有渲染。

    因为 Vue 组件通过 $emit 触发的事件并不是异步执行的,而是同步执行。

    解决方式

    一、nextTick

          this.$nextTick(() => {
          //  执行echarts方法
            this.initEcharts()
          })

    二、setInterval

     

     setInterval(() => {
            //  执行echarts方法
            this.initEcharts()
          }, 500);

    弹出层组件和画图方法:

        <popup :tClick="retreatFromSave" :tBoot="organizationUp" tWidth='1080px'>  
          <div slot="main" class="teamwork-text-nr">
            <div class="line">实景图</div>
                <!-- 图表 -->
                <div id="sCharts" style="height: 500px;"></div>
              </div>
          <div slot="footer" style="text-align: right;padding-right: 30px;">
            <jurisbtn tFloat="none" :tClick="retreatFromSave" tName="关闭" type="primary"></jurisbtn>
          </div>
        </popup>
        //   图表
        initEcharts() {
          const myChart = this.$echarts.init(document.getElementById('sCharts'))
          const option = {
            tooltip: {
              trigger: 'axis',
              axisPointer: {
                type: 'cross'
              }
            },
            xAxis: [
              {
                type: 'category',
                data: [
                  '1月',
                  '2月',
                  '3月',
                  '4月',
                  '5月',
                  '6月',
                  '7月',
                  '8月',
                  '9月',
                  '10月',
                  '11月',
                  '12月'
                ],
                axisPointer: {
                  type: 'shadow'
                }
              }
            ],
            yAxis: [
              {
                type: 'value',
                name: '总体积',
                min: 0,
                max: 10,
                interval: 1,
                axisLabel: {
                  formatter: '{value} m³'
                }
              },
              {
                type: 'value',
                name: '使用负荷',
                min: 0,
                max: 100,
                interval: 10,
                axisLabel: {
                  formatter: '{value} %'
                }
              }
            ],
            series: [
              {
                name: '总体积',
                type: 'bar',
                data: [2.0, 4.9, 5.5, 2.2, 4.6, 6.7, 5.6, 6.2, 3.6, 2.0, 6.4, 3.3],
                itemStyle: {
                  normal: {
                    color: '#d0e17d'
                  }
                }
              },
              {
                name: '使用负荷',
                type: 'line',
                yAxisIndex: 1,
                data: [100, 22, 33, 45, 63, 80, 20, 23, 23, 65, 12, 6.2],
                itemStyle: {
                  normal: {
                    color: '#898989'
                  }
                }
              }
            ]
          }
          myChart.setOption(option);
        },

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。