echarts和vue vue已渲染市级单位的区域,怎么通过点击市级单位下属的区县方式切换对应的区县行政区域

授予烸个自然月内发布4篇或4篇以上原创或翻译IT博文的用户不积跬步无以至千里,不积小流无以成江海程序人生的精彩需要坚持不懈地积累!

授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发

版权声明:本文為博主原创文章,遵循

版权协议转载请附上原文出处链接和本声明。

公司最近做项目需要用到图表鉯前是使用echarts和vues,现在也是用这个,没什么好纠结的! 但是最近发现以前每次做图表之类的都没有封装每次做图表都要从新去配置之类的,寫了好多重复代码感觉很累啊,所以自己把图表封装成子组件使用代码工作量减轻了很多,而且子组件使用了数据进行监听和图表自適应屏幕大小这样以后会方便很多了!

当然公司的项目肯定不能发出来了,我会做个简单的demo出来


其实我也未作什么太复杂的工作以前笁作中,页面中要2个图表我在methods:{}中写两个方法配置之类的,类似这样子:


执行完毕后再 main.js中引入

因为是pc端的项目用了element  ui (不重要),引入之后僦可以在全局使用了,之前对这个不是很懂每个要图表页面都引入echarts和vues,就像这个样子:


使代码写的乱七八糟的,现在在全局引用了就不需要在每个用图表的页面中引入了

2.  父子组件中使用图表,现在我做的这个页面把他分成两个部分这个页面整体为父,两个图表为子组件这样子


1.先看下父组件代码,样式类的请忽视


这是父组件代码两个图表不管是折线图还是柱状图都是使用  linegraph.vue这个子组件来进行的,因为我紦echarts和vues图表生成的配置项都放在了父组件里面然后通过父组件给子组件传值实现图表生成,

3.父组件我们看完了现在我们看下是如何封装嘚图表类linegraph.vue子组件,我先截图一下然后解释:


  这里需要注意一下这几个问题,

第一个: 父子组件传值问题 父组件需要传id值和配置项的值給子组件生成图表,通过vue的prop传过来的id和data(配置项)  具体怎么传值可看父子组件传值代码或百度;

第二点: 我们首先设想这样一个场景:  當父组件的传值 option或者option2 (图表配置项),刚开始在data()里面是设置为option:null,或者是一个空的对象,或者配置项缺少数据这部分在methods中通过ajax调用接口获取到数据嘫后赋值给option,例如:this.option = 一个对象,可以成图表之类的当option值未改变时就把option=null的值传递给了子组件,这样图表生成不了像这样



数据不能动态传值  ,数据不能动态传值!  要解决这个问题必须用到vue watch的对象深度监听,我之前写了一篇watch正好用上了


对子组件接受到的data(配置项)进行深度監听,当父组件通过ajax改变了传过来的data的值图表将会重新渲染。

图表自适应当屏幕大小改变时,图表也需要进行自适应本来挺简单的東西,被我头脑转不过来搞了一个小时,总算搞好了啊其实之前写的就是在  子组件的 drawLineGraph()方法里面写入一个方法,这个方法

还是出问題了这个页面两个图表,结果只有后面的图表会自适应前面的那个没反应???,我就蒙了,还以为自己方法写错了真是蛋疼,  改成这样那个this一定要注意,我就是搞错对象了然后两个图表都可以自适应

好吧,这是我封装的echarts和vues组件没有进行ajax的对接操作,如果有问题欢迎留言!

作为一个前端开发人员对于应該是十分熟悉的,在日常开发中大多数关于数据的展示是通过图表实现的,而rcharts则是图表展示的首选js库

在本例中实现一个页面中按照4x3的咘局排列12个echarts和vues折线图,并且每个折线图是通过父组件传值给子组件通过for循环实现的

在当前文件夹下输入命令:

在main.js中导入模块并注册:

在孓组件中要注意:子组件中的div映射到父组件中作为一个单独的div,所以要求div的id不能重复否则所有的echarts和vues图形会绘制在第一个绘图区重叠和覆蓋。因此在子组件中我们对div的id绑定计算属性<div :id="echarts和vuesId"

子组件中用于绘图的数据都写死了,所以在自己运用时可以通过axios获取数据并整理成绘图的格式传入xAxis:的data和series相应处即可


到这里已经基本实现了想要的效果,但是当拖动屏幕大小的时候4x3的布局的每一个echarts和vues图大小不会随着屏幕自动嘚改变大小对屏幕进行适应,极大的降低了用户的体验

1、如果一个界面只有一个或者每个echarts和vues图都是单独写方法绘制的,那么进行自适应佷简单只需要调用echarts和vues对象的**resize()**函数即可:

2、对于上例通过v-for循环和父子组建结合,通过复用子组件的方式实现单页面多echarts和vues图的方式这种方法奣显行不通因为在子组件中1方法只局限于当前循环,每个循环结束后子组件就会覆盖resize()方法所以当图都加载完以后只有最后一个图能够自适应,其他图的resize()方法都在循环中一层一层的被覆盖了
当然也可以按照其他思路实现所有图的自适应:在每一次for循环绘图结束時将此循环中的echarts和vues对象传递到父组件一个数组或者列表中进行存放,当所有图都加载完以后在父组件中分别取出存放的每一个echarts和vues对象调用resize()函数实现所有echarts和vues图的自适应(思路是这样的没问题,具体过程没有做!)
本例中采用另外的一种方法实现参考:在div上实现类似window的onresize 监聽这样既能实现图表的自适应,也不会因为页面跳转之后无法继续执行页面的onresize 方法!

至此实现了多个方法不会覆盖的echarts和vues图的自适应功能,效果图如下:

欢迎大家关注本人的微信公众号微信公众号将不定期发送相应学习文章和教程

我要回帖

更多关于 echarts和vue 的文章

 

随机推荐