lineChart 组件代码
<template>
<div :id="name" :style="echartStyle"></div>
</template>
<script setup lang='ts'>
import { onBeforeUnmount, onMounted, ref, toRef, watch } from 'vue'
import * as Echarts from 'echarts'
const prop = defineProps({
name: String,
echartStyle: Object,
option: Object,
onClick: Object
})
let echartsModel = ref(null)
watch(
() => prop.option,
() => {
initEchart()
}
)
watch(
() => prop.echartStyle,
() => {
if (echartsModel) {
this.echartsModel.resize()
}
}
)
const initEchart = () => {
echartsModel = Echarts.init(document.getElementById(prop.name))
echartsModel.clear()
echartsModel.showLoading('default', {
text: '加载中',
color: '#409EFF',
textColor: '#409EFF',
maskColor: 'rgba(0, 0, 0, 0.5)',
zlevel: 0
})
echartsModel.setOption(prop.option)
echartsModel.off('click')
if (prop.onClick) {
echartsModel.on('click', (param) => {
context.emit('chartClick', param)
})
}
echartsModel.hideLoading()
}
const drawResize = () => {
if (echartsModel) {
echartsModel.resize()
}
}
onMounted(() => {
window.addEventListener('resize', drawResize, 20)
initEchart()
})
onBeforeUnmount(() => {
echartsModel.dispose()
window.removeEventListener('resize', drawResize, 20)
})
</script>
调用代码
<lineChart :name="echartName" :echartStyle="echartStyle" :option="option" v-show="showLine"></lineChart>
赋值代码
await queryData(form)
option.value = setOption(tableData.value);
showLine.value = true;
注意
let option = ref({});
option 我定义的是 ref的 难道要定义成reactive的空对象????试了 报错
你定义的echartsModel是ref类型的
试试把它要赋值的地方改成echartsModel.value