首页 前端知识 vue3 setup使用echarts图表

vue3 setup使用echarts图表

2024-07-30 22:07:11 前端知识 前端哥 242 727 我要收藏

在此之前,本人有查询关于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)

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

转载请注明出处或者链接地址:https://www.qianduange.cn//article/14642.html
标签
评论
发布的文章

AE、Lottie、JSON简单介绍

2024-08-12 10:08:42

VSCode配置settings.json

2024-08-12 10:08:42

JSON 格式说明

2024-08-12 10:08:34

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!