当前位置: 首页 > news >正文

【前端】【组件】【vue2】封装一个vue2的ECharts组件,不用借助vue-echarts

在Vue2项目中使用ECharts 5.6的完整实现步骤如下:

  1. 安装依赖
npm install echarts@5.6.2 --save  # 指定安装5.x最新版本
  1. 基础组件实现(新建components/ECharts.vue
<template>
  <div ref="chartDom" class="echarts-container"></div>
</template>

<script>
import * as echarts from 'echarts';

export default {
  props: {
    options: {  // 接收父组件传入的配置
      type: Object,
      required: true
    }
  },
  data() {
    return {
      chartInstance: null  // 存储图表实例
    };
  },
  mounted() {
    this.initChart();
    window.addEventListener('resize', this.handleResize);  // 响应式处理
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.handleResize);  // 清理事件监听
    if (this.chartInstance) {
      this.chartInstance.dispose();  // 销毁实例
    }
  },
  methods: {
    initChart() {
      this.chartInstance = echarts.init(this.$refs.chartDom);
      this.chartInstance.setOption(this.options);
    },
    handleResize() {
      this.chartInstance?.resize();  // ES2020可选链操作符
    }
  },
  watch: {  // 监听options变化
    options: {
      deep: true,
      handler(newVal) {
        this.chartInstance?.setOption(newVal);
      }
    }
  }
};
</script>

<style scoped>
.echarts-container {
  width: 100%;
  height: 400px;  /* 默认高度 */
}
</style>
  1. 使用示例(在父组件中):
<template>
  <div>
    <ECharts :options="chartOptions" />
  </div>
</template>

<script>
import ECharts from '@/components/ECharts.vue';

export default {
  components: { ECharts },
  data() {
    return {
      chartOptions: {
        title: {
          text: '销售趋势分析',
          left: 'center'
        },
        tooltip: {
          trigger: 'axis'
        },
        xAxis: {
          type: 'category',
          data: ['1月', '2月', '3月', '4月', '5月', '6月']
        },
        yAxis: {
          type: 'value'
        },
        series: [{
          name: '销售额',
          type: 'line',
          data: [820, 932, 901, 934, 1290, 1330],
          smooth: true,
          areaStyle: {}
        }]
      }
    };
  }
};
</script>

关键优化点

  1. 响应式设计:自动监听窗口resize事件并调整图表尺寸
  2. 配置更新:通过watch深度监听options变化实现动态更新
  3. 内存管理:在组件销毁时正确释放图表资源
  4. 错误处理:使用可选链操作符避免空值错误

扩展建议

  1. 按需引入:通过echarts/core实现按需打包
import { use } from 'echarts/core';
import { CanvasRenderer } from 'echarts/renderers';
import { LineChart } from 'echarts/charts';
import {
  TitleComponent,
  TooltipComponent,
  GridComponent,
  LegendComponent
} from 'echarts/components';

use([
  CanvasRenderer,
  LineChart,
  TitleComponent,
  TooltipComponent,
  GridComponent,
  LegendComponent
]);
  1. 主题定制:可注册自定义主题
// 在main.js中
import theme from './echarts-theme.json';
echarts.registerTheme('myTheme', theme);

// 组件中使用
this.chartInstance = echarts.init(this.$refs.chartDom, 'myTheme');
  1. 性能优化:大数据量时启用大数据模式
series: [{
  type: 'line',
  large: true,  // 开启大数据优化
  largeThreshold: 2000,  // 数据量>2000时启用
  // ...
}]

相关文章:

  • ctf-web: php原生类利用 -- GHCTF Popppppp
  • 深度学习笔记——残差网络和模型选择
  • 【python-uiautomator2】手机上的ATX应用界面报错问题处理:无法提供服务,非am instrument启动
  • 图像处理篇---opencv中的图像特征
  • JavaScript基本知识
  • 【C++模板】:开启泛型编程之门(函数模版,类模板)
  • 大模型在甲状腺良性肿瘤诊疗全流程中的应用研究报告
  • 【Golang】第一弹-----初步认识GO语言
  • docker 小记
  • 使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)
  • Node 使用 SSE 结合redis 推送数据(echarts 图表实时更新)
  • Javascript基础语法详解
  • 深入探索Matter协议:开发Matter智能家居设备的基本步骤
  • 《Java三剑客:JDK、JRE、JVM的“塑料友情”》
  • wireshark 如何关闭混杂模式 wireshark操作
  • redis在ubuntu更新至最新版本-官方提供方法-查看版本和状态-查看数据库中数据
  • 【Javascript网页设计】在线食谱分享页面案例
  • 网络防火墙是什么有什么用_网络防火墙:守护信息安全的重要屏障
  • 【论文精读】ACE-Zero
  • 电脑的写字板如何使用?
  • 网站建设小组五类成员/中美关系最新消息
  • 政府网站平台建设标准/seo综合查询中的具体内容有哪些
  • 最好的网站开发系统/seo运营招聘
  • 苏州做网站品牌公司/北京网站优化公司
  • 叫外包公司做网站不肯给源代码的/网站收录查询入口
  • 绍兴公司网站建设 中企动力绍兴/seo搜索引擎优化推广专员