echarts vue3 组件封装使用
echarts的vue3 组件封装使用》》偏向于更高自由度
·
vue3+ts的开发中,echarts公共组件的封装使用。
首先是基础组件
<script setup lang="ts">
import type { BaseOptionType } from '@/types/OptionPropsType'
// props
// 定义参数类型
const props = defineProps<BaseOptionType>()
// 初始化echarts
const barEchart = ref()
onMounted(() => {
let baseChart = props.echarts.init(barEchart.value)
// 两种配置
if (props.optionsFunc) {
// 传入echarts和初始化后的实例
baseChart.setOption(props.optionsFunc(props.echarts,baseChart))
}
// 如果直接是个对象 直接传入使用
if (props.options) {
baseChart.setOption(props.options)
}
})
</script>
<template>
<div ref="barEchart" class="baseChart"></div>
</template>
<style scoped>
.baseChart {
width: 100%;
height: 100%;
}
</style>
类型文件
// 取值的PICK 这部分也可以单独拆分到一个工具类型文件里
export type ProPick<T, K extends keyof T> = NonNullable<T[K]>
// 配置类型 我ts学的不太好,我不知道如何才能找到echatrts官方提供的各种类型,就自己写一些进行替代
export interface BaseOptionType {
echarts?: any
options?: {
xAxis?: any
yAxis?: any
series: any[]
[key: string]: any
}
optionsFunc?(echarts?: any,targetEcharts?:any): ProPick<BaseOptionType, 'options'>
}
当使用某种类型的图表时,建立衍生组件,示例:
<script setup lang="ts">
import * as echarts from 'echarts/core'
// 直接引入必要的echarts组件 然后引入echartsBaseVue使用即可 正常传参
import { GridComponent, LegendComponent } from 'echarts/components'
import { BarChart,LineChart } from 'echarts/charts'
import { CanvasRenderer } from 'echarts/renderers'
import echartsBaseVue from './echartsBase.vue'
import type { BaseOptionType } from '@/types/OptionPropsType'
echarts.use([GridComponent, BarChart, CanvasRenderer,LegendComponent,LineChart])
// props
const props = defineProps<BaseOptionType>()
</script>
<template>
<echartsBaseVue
:options="props.options"
:options-func="props.optionsFunc"
:echarts="echarts">
</echartsBaseVue>
</template>
<style scoped></style>
使用
<template>
<!-- 外层盒子宽高决定了内部图表宽高 -->
<div class="chart-box">
<BarChartVue :options-func="chartOptionFunc"></BarChartVue>
</div>
</template>
<script setup lang="ts">
import BarChartVue from '@/components/chartComponent/BarChart.vue'
// 第一个参数为echarts对象 第二个能拿到的是初始化后的当前的echarts实例
function chartOptionFunc(echarts: any, baseChart: any) {
// 配置初始状态对象 最好这个配置直接去echarts官方直接复制过来,方便又轻松
const optionObj = {
tooltip: {
},
grid: {
},
xAxis: {
},
yAxis: {},
series: []
}
// 监听数据更新来更新图表 可以响应式更新图表内容
watch(EnterpriseDistributionlabel, () => {
baseChart.setOption(optionObj)
})
return optionObj
}
</script>
<style scoped>
</style>
更多推荐
已为社区贡献1条内容
所有评论(0)