问答

vue使用echarts,页面打开很小,刷新后才正常。请问下面代码是那

作者:admin 2021-05-05 我要评论

template div id="cost" div class="costWrap" div class="costEcharts" div id="costec" class="echarts" style="width: 350px;height: 242px;"/div /div /div ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
<template>
  <div id="cost">
    <div class="costWrap">
      <div class="costEcharts">
        <div id="costec" class="echarts" style="width: 350px;height: 242px;"></div>
      </div>
    </div>
  </div>
</template>
<script>
// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from 'echarts/core'
// 引入柱状图图表,图表后缀都为 Chart
import {
  BarChart, PieChart
} from 'echarts/charts'

// 引入提示框,标题,直角坐标系组件,组件后缀都为 Component
import {
  TitleComponent,
  TooltipComponent,
  GridComponent
} from 'echarts/components'
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import {
  CanvasRenderer
} from 'echarts/renderers'

// 注册必须的组件
echarts.use(
  [TitleComponent, PieChart, TooltipComponent, GridComponent, BarChart, CanvasRenderer]
)

export default {
  name: 'Cost',
  components: {
  },
  data () {
    return {
      myChart: {},
      option: {
        tooltip: {
          trigger: 'item',
          // formatter: '{b} : {c} ({d}%)',
          formatter: function (param) {
            return param.marker + ' ' +
            '&nbsp;' + param.name + ':' + param.value + ' : ' + param.percent + '%'
          },
          backgroundColor: 'rgba(50, 50, 50, 0.7)',
          borderColor: 'rgb(51, 51, 51)',
          padding: [3, 8],
          textStyle: {
            color: '#fff',
            align: 'left',
            fontSize: 12
          }
        },
        series: [
          {
            name: '访问来源',
            type: 'pie',
            radius: ['50%', '70%'], // 饼图的半径。 可以将内半径设大显示
            avoidLabelOverlap: false,
            startAngle: 180,
            label: {
              formatter: '{b}',
              position: 'outside',
              color: '#FFF'
            },
            itemStyle: {
              borderWidth: 1,
              borderColor: '#fff'
            },
            data: [
              { value: 1048, name: '搜索引擎' },
              { value: 735, name: '直接访问' },
              { value: 580, name: '邮件营销' },
              { value: 484, name: '联盟广告' },
              { value: 300, name: '视频广告' }
            ]
          }
        ]
      }
    }
  },
  created () {
    this.$nextTick(() => {
      this.fetch()
    })
  },
  methods: {
    init () {
      const _this = this
      window.addEventListener('resize', () => {
        console.log('init')
        _this.myChart.resize()
      })
    },
    fetch () {
      this.myChart = echarts.init(document.getElementById('costec'))
      this.myChart.setOption(this.option)
      window.addEventListener('resize', this.myChart.resize)
    }
  },
  mounted () { // 钩子
  this.fetch()
  window.addEventListener('resize', () => { this.myChart.resize() })
console.log(document.getElementById('costec').offsetWidth)
console.log(document.getElementById('costec').offsetHeight)

  }
}
</script>

刷新的时候就如下面的图
打印出来的 宽度和高度 32 * 22
image.png

拉窗口就正常了
image.png

###

把这段代码从created放到mounted里面试试

this.$nextTick(() => {
  this.fetch()
})

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • vue使用echarts,页面打开很小,刷新后

    vue使用echarts,页面打开很小,刷新后

  • js for循环push新数组的key值相同问题.

    js for循环push新数组的key值相同问题.

  • el-tree 回显数据,父级选中,子级部分

    el-tree 回显数据,父级选中,子级部分

  • java项目引用了swagger3,请问如何自定

    java项目引用了swagger3,请问如何自定

腾讯云代理商
海外云服务器