vue3封装echarts组件,传option配置项即可

<template>
    <div ref="chart" class="chart" :style="style"></div>
</template>

<script setup lang="ts">
import { ref, reactive, watch, nextTick } from 'vue'
import * as echarts from "echarts";

// 接收值
const props = defineProps({
    option: {
        type: Object,
        default: () => { }
    }
})

// 定义值
const chart = ref(),
    myChart = ref()
const style = reactive({
    width: '100%',
    height: '100%',
})

// 定义加载函数
const initCharts = () => {
    // 2. 判断 dom 是否为空或未定义
    if (myChart.value != null && myChart.value != "" && myChart.value != undefined) {
        // 3. 已存在则调用 dispose() 方法销毁
        myChart.value.dispose();
    }
    myChart.value = echarts.init(chart.value)
    myChart.value.setOption(props.option)
    // 当窗口大小改变时候,echarts重置大小
    window.addEventListener('resize', () => {
        myChart.value.resize()
    })
}

// 监听当配置项发生变化的时候,调用加载函数
watch(
    () => props.option,
    val => {
        if (Object.keys(val)) {
            nextTick(() => {
                initCharts()
            })
        }
    },
    { immediate: true }
)
</script>

<style lang="less" scoped></style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。