1、封装的原因

如果在vue项目中有多个组件或者同个组件多出地方需要不同的图表,因此自己封装一个方便多次复用的Mycharts图表组件。

2、具体步骤:

2.1 安装echarts

pnpm i echarts --save

2.2 新建MyCharts组件 :

~components/echarts/MyCharts.vue:

这里需要引入echarts:

import * as echarts from 'echarts';

<template>
  <div>
    <!-- 准备一个有宽高的dom ———— 其他内容从父组件传过来 -->
    <div :id="uid" :style="style"></div>
  </div>
</template>
<script setup>
import { ref, reactive, computed, onMounted, nextTick } from 'vue'
import * as echarts from 'echarts';
const props =  defineProps({
    dataSource: {
        type: Object,
        default: null,
        required: true
    },
    canvasWidth: {
        type: String,
        default: '',
        required: true
    },
    canvasHeight: {
        type: String,
        default: '',
        required: true
    }
})
const uid = ref('')
const myChart = ref(null)
// 时间戳+随机字符
uid.value = new Date().getTime() + Math.random().toString(32).slice(2, 10)
console.log('uid:', uid.value);

let style = computed(() => ({
    width: props.canvasWidth,
    height: props.canvasHeight
}))
console.log('style:', style.value);

const init = () => {
    // 基于准备好的dom,初始化echarts实例
    myChart.value = echarts.init(document.getElementById(uid.value))
    // 绘制图表
    myChart.value.setOption(props.dataSource)
}
onMounted(() => {
    // nextTick(() => {
    //     init()
    // })
    init()
})


</script>
<style scoped>

</style>

2.3 需要调用MyCharts组件的父组件:

<template>
  <div :style="{ transform: `scale(${scale})` }">
    <div class="title">封装echarts图表</div>
    <!-- 调用图表组件 -->
    <MyCharts :dataSource="dataSource" :canvasWidth="canvasWidth" :canvasHeight="canvasHeight"></MyCharts>
    <MyCharts :dataSource="dataSource2" :canvasWidth="canvasWidth" :canvasHeight="canvasHeight"></MyCharts>
  </div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import MyCharts from '../../components/echarts/MyCharts.vue'    // 引入封装的图表组件
import { useSelfAdaption } from '../../hooks/useSelfAdaption'

const dataSource = reactive({
    title: {
        text: '周销售总额'
    },
    tooltip: {},
    xAxis: {
        data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    yAxis: {},
    series: [
        {
        name: '小米',
        type: 'bar',
        data: [60, 45, 52, 38, 49, 55, 66]
        }
    ]
})
const dataSource2 = reactive({
    title: {
        text: '数据都想躺平'
    },
    tooltip: {},
    xAxis: {
        data: ['梦想', '咸鱼', '躺平', '鸡汤', '努力', '暴富']
    },
    yAxis: {},
    series: [
        {
        name: 'vivo',
        type: 'line',
        data: [50, 80, 66, 70, 69, 71]
        }
    ]
})
const canvasWidth = ref('400px')
const canvasHeight = ref('200px')

// 自适应 - 缩放
const { scale } = useSelfAdaption()

</script>
<style lang="less" scoped>
.title{
    text-align: center;
}
</style>

3、效果:

4、这里我还引入了前面封装好的自适应大屏的useSelfAdaption的hooks方法 :

import { useSelfAdaption } from '../../hooks/useSelfAdaption'

// 自适应 - 缩放
const { scale } = useSelfAdaption()

使用: :style="{ transform: `scale(${scale})` }"

<template>
  <div :style="{ transform: `scale(${scale})` }">
    <div class="title">封装echarts图表</div>

这样你就成功封装好了一个echarts图表组件并成功使用啦!

扩展:

        性能优化:

在数据可视化大屏中,图表的性能尤为重要。我们可以通过以下方式进行优化:

合理使用debounce来减少窗口大小变化时的resize事件触发频率。
使用canvas渲染模式,相比于svg,canvas在大数据量下有更好的性能表现。
利用ECharts的showLoading和hideLoading方法,在数据加载时显示加载动画,避免用户看到空白的图表。

        交互优化:

为了提升用户体验,我们可以增加一些交互功能:

提供缩放控制,允许用户通过鼠标滚轮或者按钮来缩放图表。
实现图表的导出功能,允许用户将当前的图表保存为图片或者PDF文件。

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐