最近有多位读者反应,3D 饼图在 VUE 环境里跑不通。可我其实是一个先学 ECharts 后学 Javascript 的前端外行,再加上读者往往也没有告诉我具体的报错信息是什么,所以一时也没能帮读者找出问题原因。
这两天有空,为了看看到底是什么原因,我跑去查了查 VUE 的手册和教程,尝试在 @vue/cli 创建的 webpack 中,把我的 3D 饼图跑通。最终效果如下:
下文主要分为三大块:
环境准备(前端们见笑了,可以略过)
建议跟我一样的前端外行,直接使用包管理器安装,具体搜索「Installing Node.js via package manager」吧,我之前用的好像是「yum」,安装后使用命令:
node -v
查看安装结果。
Node.js 安装好之后,使用命令:
npm install -g @vue/cli
安装「Vue-CLI」,完成后使用命令「vue -V」查看安装结果。
「Vue-CLI」安装后,就可以使用「vue create xxx」命令创建项目(我选择的「Vue 2」),xxx 是项目名称,也是自动创建的项目目录名。
项目创建完成,按提示跑一下先看看「cd xxx&&npm run serve」
浏览器访问,效果如下
安装 ECharts 相关依赖
在项目目录中执行命令
npm install echarts@4.9.0 echarts-gl vue-echarts –-save
安装所需的 ECharts 依赖。
Vue-ECharts Apache ECharts (incubating) component for Vue.js. https://github.com/ecomfe/vue-echarts
App.vue 文件编写
「Vue-ECharts」的 README.md 中,有一个极坐标线图的例子可供参考。
我就是参考那个文件,改写我的 3D 饼图的。有兴趣的同学可以自行尝试一下,也可以后台回复数字「210106」,下载我写好的「App.vue」,替换掉 src 目录下的 App.vue。
改写/替换好之后,再次运行项目
浏览器访问,效果如下
从文档中查到,扩展名为 .vue 的文件被称为 single-file components (单文件组件),而这个 App.vue 又有点像 Express 的 app.js,似乎是整个项目的入口文件。作为新手,为了省事,我直接把内容写到了 App.vue 中…
:options="pie3D":也就是 v-bind:options="pie3D",这个 options 就是 ECharts 实例的数据,修改这个参数会触发 ECharts 实例的 setOption 方法。
注意:如果直接修改 options 绑定的数据而对象引用保持不变,setOption 方法调用时将带有参数 notMerge: false。否则,如果为 options绑定一个新的对象,setOption 方法调用时则将带有参数 notMerge: true。
ref="pie3D":ref 被用来给元素或子组件注册引用信息。
:manual-update=true:当将 manual-update prop 指定为 true 且不传入 options prop 时,数据将不会被监听。然后,你需要用 ref 获取组件实例以后手动调用 mergeOptions 方法来更新图表。
@click="onClick":也就是 v-on:click="onClick",为 click 事件绑定 onCLick 方法,而方法也是在后面的 <script> 标签中定义的。
后略(同上)
其中 onClick、onMouseover、onGlobalout 这三个函数,是根据之前 Gallery 中例子里的,三个 mychart.on('xxx', handler) 改写的。主要改动是通过 this.pie3D 获取、更新饼图当前的 option 数据,通过 mergeOptions 方法刷新图表。
此前的 3D 饼图文章
另外,有些读者在 Gallery 看到的例子可能是基于我这个改写的,增加了单独设置高度的功能:
回复评论:能单独调每一块内容的高度吗..有高有低的那种 你们都太有想法了~ 把 z:function(u, v) { } 里面的返回值,都乘以一个系数就可以,然后这个系数作为 getParametricEquation 函数的入参传进来。(当然后面那些高亮、放大效果也得跟着改一下) https://www.makeapie.com/editor.html?c=xojSDhHAMm
本文分享自 ZXand618的ECharts之旅 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!