vue3+ts 画echarts环形图表,不用defineComponent
时间: 2023-11-22 21:04:16 浏览: 102
vue3+ts+echarts实现echarts封装
如果你不想使用 `defineComponent` 来定义组件,也可以使用 Vue3 的 `defineAsyncComponent` 函数异步加载组件,并在组件的 `setup` 函数中使用 `ref` 创建响应式数据。
以下是示例代码:
```typescript
<template>
<div>
<my-echarts :options="options" :auto-resize="true" :renderer="'canvas'" :chart="chartRef"></my-echarts>
</div>
</template>
<script lang="ts">
import { defineAsyncComponent, onMounted, ref } from 'vue'
import * as echarts from 'echarts'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { PieChart } from 'echarts/charts'
import { LegendComponent, TooltipComponent } from 'echarts/components'
import VueECharts from 'vue-echarts'
use([CanvasRenderer, PieChart, LegendComponent, TooltipComponent])
const MyECharts = defineAsyncComponent(() => import('vue-echarts'))
export default {
components: {
MyECharts
},
setup() {
const chartRef = ref(null)
const chart = ref<echarts.ECharts | null>(null)
const options: echarts.EChartsOption = {
title: {
text: '环形图示例'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b}: {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 10,
data: ['数据1', '数据2', '数据3', '数据4', '数据5']
},
series: [
{
name: '访问来源',
type: 'pie',
radius: ['50%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '30',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [
{ value: 335, name: '数据1' },
{ value: 310, name: '数据2' },
{ value: 234, name: '数据3' },
{ value: 135, name: '数据4' },
{ value: 1548, name: '数据5' }
]
}
]
}
onMounted(() => {
if (chartRef.value) {
chart.value = echarts.init(chartRef.value)
chart.value.setOption(options)
}
})
return {
chartRef,
options
}
}
}
</script>
```
注意,在这个示例中,我们使用了 `defineAsyncComponent` 函数异步加载 `vue-echarts` 组件,并使用 `ref` 函数创建了 `chartRef` 响应式数据。在 `setup` 函数中使用 `onMounted` 钩子函数初始化 Echarts 实例并设置选项,并返回 `chartRef` 和 `options` 数据。在模板中,我们通过 `<my-echarts>` 标签来使用异步加载的 `vue-echarts` 组件,将 `chartRef` 和 `options` 作为属性传入。
阅读全文