vue3 setup使用echarts图表

在此之前,本人有查询关于echarts的文章,也看过官方文档

一直有一个误区 就是echarts的初始化需要放在onMounted或者mounted中。

<template>
    <div ref="main" style="width: 100%; height: 400px"></div>
</template>
<script setup lang="ts">

import { ref, onMounted } from "vue";
//  按需引入 echarts
import * as echarts from "echarts";
const main = ref() // 使用ref创建虚拟DOM引用,使用时用main.value
onMounted(() => {
    init()
})
const init = () => {
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(main.value, 'null', { width: 400, height: 350 });
    // 指定图表的配置项和数据
    var option = {
        title: {
            text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
            {
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }
        ]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
}

</script>

页面展示:

当业务在涉及到传值调用接口的时候就不知道该怎么做了。今天试了试,发现可以将初始化放在事件中执行。测试了一波按钮触发,完全ok,这个项目的业务需求需要放在对话框Dialog中。

代码如下:

<template>
    <button @click="showecharts">查看图表</button>
    <el-dialog v-model="dialogVisible" title="详情" >
        <div ref="main" style="width: 100%; height: 400px"></div>
    </el-dialog>
</template>
<script setup lang="ts">
import { ref} from "vue";
//  按需引入 echarts
import * as echarts from "echarts";
const main = ref() // 使用ref创建虚拟DOM引用,使用时用main.value
const dialogVisible = ref(false)
const showecharts=()=>{
    dialogVisible.value=true
    init()
}
const init=()=> {
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(main.value);
    // 指定图表的配置项和数据
    var option = {
        title: {
            text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
            {
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }
        ],
        grid: {
            left: '10%',
            // right: '4%',
            width: '500px',
            bottom: '3%',
            containLabel: true
        }
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
}

</script>

此时发现控制台报错了,是因为在初始化的时候,main的dom还未渲染

解决办法:

 setTimeout(()=>{
        init()
    },200)

虽然问题解决了,但是感觉还不是最优解,各位大佬可以给一些建议吗?

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值