Vue中封装eCharts组件及优化方式
Vue封装eCharts组件及优化
Vue中想要使用eCharts作为一个单独的组件进行封装,一般需要考虑的是option的封装、视口变化或数据变化更新eCharts视图,以及在组件销毁之前注销eCharts组件以释放其占用的内存。
option的封装思路
一般情况下,一个业务模块内eCharts的风格只有固定的几种内容,因此仅需要对固定的几种模式进行封装即可,我这里采用生成option的方式节约代码量
generateOptionFrom(originalChartData, options = {}) { // do something with originalData let series = doSomething(originalChartData); return { name: '', legend: [], tooltip: {}, // ... series, ...options }; }
eCharts组件封装要点
eCharts组件和直接在js中更新eCharts有些许不同,js调用时,数据更新需要调用API中的setOption,Vue组件中想要更新组件,由于数据并不是挂载到DOM属性上的,因此需要用watch监听数据更新
<template> <div class="charts" ref="eCharts"> </div> </template> <script> import * as echart from 'echarts'; export default { props: { options: { type: Object }, height: { type: String, default: '300px' } }, mounted() { // eCharts在初始化的时候有时捕捉不到元素高度,这里手动设置一下 this.$refs.eCharts.style.height = this.height; this.$nextTick(() => { this.initChart(this.options); }); }, beforeDestroy() { // 组件销毁时主动释放eCharts内存空间 const chartsInstance = echart.getInstanceByDom(this.$refs.eCharts); chartsInstance && chartsInstance.dispose(); window.onresize = null; }, watch: { options() { const chartsInstance = echart.getInstanceByDom(this.$refs.eCharts); chartsInstance && chartsInstance.setOption(this.options); } }, methods: { initChart() { if (!this.$refs.eCharts) { // 确保执行初始化时Container存在 return; } const chartInstace = echart.init(this.$refs.eCharts); chartInstace.setOption(this.options); // 视口大小变化时调用resize调整eCharts大小,如果Container尺寸并非自适应则无需设置 window.onresize = function () { chartInstace.resize(); }; // ...add other operations or events } } } </script>
这里使用ref去找Container元素是利用Vue的优势,比起使用选取dom的方式方便很多
Vue封装echarts组件多次调用出现id重复
问题描述
封装的echarts组件多次被调用,id重复,导致页面不渲染、数据覆盖等一系列问题
解决方法
1、把id改成动态传参(这里就不作代码展示了)
2、把id换成ref
//修改前 <div id="vcharts" style="width: 100%; height: 500px"></div> //修改后 <div ref="vcharts" style="width: 100%; height: 500px"></div> //修改前 let myChart = this.$echarts.init(document.getElementById("vcharts")); //修改后 let myChart = this.$echarts.init(this.$refs.vcharts);
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
vue-cli 自定义指令directive 添加验证滑块示例
本篇文章主要介绍了vue-cli 自定义指令directive 添加验证滑块示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10Vue项目打包成exe可执行文件的实现过程(无瑕疵,完美版)
突然接到公司需求,说客户想让我们把项目直接打包,所以下面这篇文章主要给大家介绍了关于Vue项目打包成exe可执行文件的实现过程,文中通过图文介绍的非常详细,需要的朋友可以参考下2022-11-11
最新评论