最近一段时间作了一个使用echarts的图表项目。因为理解API能力有限,使用起来并不是畅通无阻。
所谓好记性不如烂笔头,现将一些比较关键的点记录一下,供后续查看。html
项目:ionic+angular4+echartsnpm
1.因为打包缘由,echarts不能直接引入进package.json的dependencies中,只能以原始的方式从index.html中引入json
<script src="assets/js/echarts.min.js"></script>
2.在组件的.html文件中canvas
<div echarts [options]="pieOption" (chartClick)="jump2Detail($event)"></div>
3.在组件的.ts文件中配置好pieOption的值以及点击drill down的逻辑jump2Detailapp
4.ngx-echarts插件 --能够获取echarts实例的serviceecharts
安装:npm install ngx-echarts 配置:AngularEchartsModule or NgxEchartsModule("ngx-echarts": "^2.1.0") -- 根据版本不一样导入模块 从ngx-echarts.module.d.ts这个文件中看export哪一个模块
//app.module.ts import { NgxEchartsModule } from 'ngx-echarts'; @NgModule({ imports:[NgxEchartsModule], // ... }) //xxx.ts import { NgxEchartsService } from 'ngx-echarts'; export class xxx { constructor( private echartService:NgxEchartsService ){...} fn(){ let echartInstance = this.echartsService.getInstanceByDom(xxx); //获取echarts实例,而后能够调用内部的方法update一些东西 ... } }
5.图表宽度自适应 -- resize功能dom
使用方式: i.指令配置 -- 忘了 ii.手动代码 @HostListener('window:resize', ['$event']) resize(event) { setTimeout(() => { //存在多个图表时,全部均须要自适应的状况 let echartDoms = Array.from(document.getElementsByClassName('xxx')); echartDoms.forEach(dom => { this.echartService.getInstanceByDom(dom).resize(); }) }, 100); }
6.图表的事件 -- 普通鼠标事件与图表自定义的事件都可以经过实例绑定angular4
//'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout' echartInstance.on('click',params => { ... }); //datazoom、legendscroll、datarangeselected、... echartInstance.on('dataZoom',params => { ... }) //有些事件在angular中有对应的指令形式 //chartClick、chartDbClick、chartMouseDown、chartMouseUp、chartMouseOver、chartMouseOut、chartGlobalOut、chartContextMenu、chartDataZoom <div echarts [options]="pieOption" (chartClick)="jump2Detail($event)"></div>
1.每一块渲染区域都有一个position的设置,能够自定义离上、下、左、右的距离ionic
grid:{ top:... left:... bottom:... right:... } legend:{ top:... left:... ... }
2.每个涉及值的显示点基本都提供了formatteride
tooltip:{ formatter: params => { //自定义hover状态数据显示的状况 let str = ''; str += `<h6 style="color:#fff;font-size:13px;margin:4px 0">${params[0].name}</h6>`; params.forEach(item => { str += `${item.marker}${item.seriesName}: ${Math.round(item.value).toLocaleString()}<br>`; //item中提供了图标、颜色等 }); return str; } } legend:{ formatter: (name) => { //须要根据值去重算数据而后显示的状况 let source = data.source[name.toUpperCase()]; var total = 0; source.forEach(element => { total += element; }); return name + ': ' + Math.round(total).toLocaleString(); } }
3.xAxis/yAxis 配置坐标轴的一些属性 刻度、坐标轴名称、如何显示坐标信息等
4.toolbox 工具栏,内置有导出图片、数据视图、动态类型切换、数据区域缩放、重置5个工具
其中导出图片能够本身经过canvas的相关API 将多个图表一并导出
5.dataZoom 数据区域缩放组件 -- 能够一个也能够多个
dataZoom:[ { type:'inside', //内置在坐标系中 经过鼠标滚轮或者手指touch进行处罚 ... }, { type:'slider', //在外部 显示为滑动条形的一个组件,可直接拖动使用 ... } ]
6.series 系列列表,每一个系列经过type决定图表类型 --根据不一样的图表注入不一样格式的数据
series:{ type:'line'/'pie'/'bar'/'treemap', ... }
其实细分到每个图表都有一些细微的设置,数据以及颜色、间距等,待续...
若是bug请指正Thanks♪(・ω・)ノ!