vue3+ts下的echarts基本写法

本文介绍了如何在Vue项目中使用ECharts库创建图表,包括设置数据、初始化图表实例、以及在DOM上挂载和配置图表选项的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:

快速上手 - 使用手册 - Apache ECharts

<template>
    <div class='con'>
        <header>

        </header>
        <section>
            <!--1-->
            <div class="echart-box" id="main" ref="box"></div>
        </section>
    </div>
</template>

<script lang='ts' setup>
/** 接口 */
import { reactive, toRefs, ref, computed, onMounted } from 'vue';
import useCurrentInstance from '@/api/useCurrentInstance';
import * as echarts from 'echarts';
const { proxy } = useCurrentInstance()
/** prop */
/** 计算属性*/
//const xx = computed(() => [])
/** data */
const state = reactive({
    tableData: []
})
const { tableData} = toRefs(state);
//2
const box=ref();
/** 监听 */
/** 生命周期 */
onMounted(() => {
    //3
    showEcarts();
})

//4
const showEcarts=()=> {
    // 基于准备好的dom,初始化echarts实例 两种写法
    var userdom = box.value;
    var myChart = echarts.init(userdom);
    //var myChart = echarts.init(document.getElementById('main'));
    var option = {
        title: {
          text: "ECharts",
        },
        xAxis: {
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {},
        legend: {
          data: ["牛波","撒波"],
        },
        series: [
            {
            name: "牛波",
            type: 'bar',
            data: [23, 24, 18, 25, 27, 28, 25],
            },
            {
            name: "撒波",
            type: 'bar',
            data: [20, 24, 18, 25, 27, 28, 25],
            }
        ]
        };
    myChart.setOption(option);
}
/** 接口 */
</script>
<style>
/**5 */
.echart-box{ 
    width: 500px;
    height: 350px;
    border: 3px solid pink;
    margin: 20px auto;
}
</style>
  

<think>嗯,用户想在Vue3和TypeScript项目中集成和使用ECharts。首先,我需要回忆一下之前用户提供的引用内容,看看有没有相关的指导。引用1和2提到了在Vue CLI3和TypeScript中安装ECharts和类型声明,引用3和4是关于Vue3的Hooks和3D图表的例子。所以,用户现在需要的是如何在Vue3TS中使用ECharts,可能包括安装步骤、基本使用、按需引入以及可能的优化。 首先,安装部分应该包括安装echarts和@types/echarts,但根据引用3Vue3可能需要不同的处理,比如使用Hooks或者Composition API。另外,按需引入可以减小打包体积,这也是用户可能关心的问题。然后,代码示例需要适应Vue3的setup语法,比如使用<script setup>和ref来操作DOM。 要注意的是,用户可能遇到类型声明的问题,比如在TS中正确导入ECharts的类型。引用2提到安装@types/echarts,但可能需要检查是否兼容Vue3。另外,引用3提到的Hooks封装可能是一个好的实践,可以推荐给用户,提高代码复用性。 还需要考虑响应式的问题,比如窗口大小变化时图表如何自适应。可能需要在组件卸载时销毁图表实例,避免内存泄漏。引用4中的3D饼图例子可能需要使用echarts-gl,但用户的问题可能更基础,先解决基本集成再扩展高级功能。 总结步骤应该是:安装依赖、创建基础组件、按需引入、优化建议和相关问题。同时,确保代码示例使用Vue3的Composition API和TypeScript,比如使用ref和onMounted生命周期,以及类型声明。</think>### 在 Vue3 + TypeScript 中集成 ECharts 的完整步骤 #### 一、基础集成方法 1. **安装依赖** ```bash npm install echarts --save npm install @types/echarts --save-dev ``` 2. **创建图表组件** ```vue <script setup lang="ts"> import { onMounted, ref } from &#39;vue&#39;; import * as echarts from &#39;echarts&#39;; const chartRef = ref<HTMLElement>(); onMounted(() => { if (chartRef.value) { const myChart = echarts.init(chartRef.value); myChart.setOption({ title: { text: &#39;Vue3 示例图表&#39; }, tooltip: {}, xAxis: { data: [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;] }, yAxis: {}, series: [{ type: &#39;bar&#39;, data: [10, 22, 28, 43, 19] }] }); } }); </script> <template> <div ref="chartRef" style="width: 600px; height: 400px;"></div> </template> ``` #### 二、按需引入优化 ```typescript // 在单独的文件中(如 src/utils/echarts.ts) import * as echarts from &#39;echarts/core&#39;; import { BarChart } from &#39;echarts/charts&#39;; import { TitleComponent, TooltipComponent } from &#39;echarts/components&#39;; import { SVGRenderer } from &#39;echarts/renderers&#39;; echarts.use([BarChart, TitleComponent, TooltipComponent, SVGRenderer]); export default echarts; ``` 使用时替换导入路径即可减少打包体积约70%[^3] #### 三、最佳实践 1. **响应式处理** 添加窗口大小监听: ```typescript import { onUnmounted } from &#39;vue&#39;; const resizeHandler = () => myChart.resize(); window.addEventListener(&#39;resize&#39;, resizeHandler); onUnmounted(() => window.removeEventListener(&#39;resize&#39;, resizeHandler)); ``` 2. **封装 Hooks** 参考引用[3],建议封装成可复用的 composition function: ```typescript export function useEChart(container: Ref<HTMLElement | undefined>, options: echarts.EChartsOption) { let chart: echarts.ECharts | null = null; onMounted(() => { if (container.value) { chart = echarts.init(container.value); chart.setOption(options); } }); onUnmounted(() => { chart?.dispose(); }); return { chart }; } ``` #### 四、3D图表支持 如需实现引用[4]的3D饼图: ```bash npm install echarts-gl ``` 组件中增加: ```typescript import &#39;echarts-gl&#39;; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值