封装一个公用组件pieChartAdaptation.vue
代码如下:
<template>
<div :style="styleObject" class="pie-chart-adaptation">
<slot></slot>
</div>
</template>
<script setup lang="ts">
import { inject, computed } from "vue";
const scaleBox: any = inject("scaleBox");
const styleObject = computed(() => {
let scaleRatio = 1;
if (scaleBox.scaleX < scaleBox.scaleY) {
scaleRatio = scaleBox.scaleX;
} else {
scaleRatio = scaleBox.scaleY;
}
return {
transform: `scale(${(1 / scaleBox.scaleX) * scaleRatio},${(1 / scaleBox.scaleY) * scaleRatio})`
};
});
</script>
<style scoped></style>
ScaleBox里面要传递参数过来
这里的ScaleBox文件参考我写的另一篇文章:
let that = reactive({
width: 1920,
height: 1080,
scaleX: 1,
scaleY: 1
});
provide("scaleBox", that);
在饼图的实例化地方直接使用
<pieChartAdaptation>要包裹的饼图</pieChartAdaptation>
即可解决饼图变形为椭圆的问题