import * as echarts from '../../../echarts/ec-canvas/echarts';
,json文件也要引入;let dataListA=[]
也可以在page data里面定义dataListA:[]
。(使用第一个方法定义需要在onshow里面初始化Chart:Chart = null
,第二种不用)let Chart = null;
dataDay: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '2', '28', '29', '30', '31'],
dataWeak: ['周一', '周二', '周三', '周四', '周五', '周六', '周末'],
dataYear: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '腊月'],
ec: {
// onInit: initChart,
// 将 lazyLoad 设为 true 后,需要手动初始化图表
lazyLoad: true
},
<view class="container" >
<ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar2" ec="{{ec}}" force-use-old-canvas="true"></ec-canvas>
</view>
``
8. 绘画图标的js代码如下
getData: function () {
/**
* 此处的操作:
* 获取数据json
*/
// dataListA = [18, 36, 65, 30, 78, 40, 33];
//如果是第一次绘制
if (!Chart) {
this.init_echarts(); //初始化图表
} else {
this.setOption(Chart); //更新数据
}
},
//初始化图表
init_echarts: function () {
this.ecComponent.init((canvas, width, height) => {
// 初始化图表
Chart = echarts.init(canvas, null, {
width: 370,
height: 260
});
// Chart.setOption(this.getOption());
this.setOption(Chart);
// 注意这里一定要返回 chart 实例,否则会影响事件处理等
return Chart;
});
},
setOption: function (Chart) {
Chart.clear(); // 清除
Chart.setOption(this.getOption(), true); //获取新数据
},
getOption: function () {
// 指定图表的配置项和数据
console.log(Chart)
var option = {
color: ["#37A2DA", "#67E0E3", "#9FE6B8"],
legend: {
data: ['支付宝', '微信', '银行卡'],
top: 10,
left: 'center',
backgroundColor: 'none',
z: 100,
type: 'scroll'
},
grid: {
containLabel: true,
bottom:10,
},
tooltip: {
show: true,
trigger: 'axis'
},
xAxis: {
type: 'category',
data: xData,
boundaryGap: false,
axisLabel: {
// interval:0,//代表显示所有x轴标签显示
},
axisLine: {
onZero: true
}
},
yAxis: {
type: 'value'
},
series: [{
name: '支付宝',
smooth: true,
data: dataListA,
type: 'line',
symbol: "none",
areaStyle: {
normal: {
// color: '#FF9307' //改变区域颜色
}
},
lineStyle: {
// color:'#FF9307' //改变折线颜色
}
},
{
name: '微信',
smooth: true,
data: dataListB,
type: 'line',
symbol: "none",
areaStyle: {
normal: {
// color: '#FF9307' //改变区域颜色
}
},
lineStyle: {
// color:'#FF9307' //改变折线颜色
}
},
{
name: '银行卡',
smooth: true,
data: dataListC,
type: 'line',
symbol: "none",
areaStyle: {
normal: {
// color: '#FF9307' //改变区域颜色
}
},
lineStyle: {
// color:'#FF9307' //改变折线颜色
}
}
]
}
return option;
},
this.getData();
switchNav(e) {
switch (e.currentTarget.dataset.index) {
case '1': //周
dataListA = 请求到的数据的第一条线需要的数据整理出来;
dataListB = 请求到的数据的第二条线需要的数据整理出来;
dataListC = 请求到的数据的第三条线需要的数据整理出来;
xData = this.data.dataWeak;//修改x轴的数据
this.getData();
break;
case '2': //天
dataListA = 请求到的数据的第一条线需要的数据整理出来;
dataListB = 请求到的数据的第二条线需要的数据整理出来;
dataListC = 请求到的数据的第三条线需要的数据整理出来;
xData = this.data.dataDay;
this.getData();
break;
case '3': //月 一年的
dataListA = 请求到的数据的第一条线需要的数据整理出来;
dataListB = 请求到的数据的第二条线需要的数据整理出来;
dataListC = 请求到的数据的第三条线需要的数据整理出来;
xData = this.data.dataYear;
this.getData();
break;
}
},
1、图标模糊可以调整图表大小,我是直接在init_echarts方法里把宽高写死了,
2、第二次进入没有渲染一片空白的问题,解决办法是每次进入页面初始化Chart ,见第四条
3、 第二次进入,数据混乱的问题,我还没有遇到过,网上搜的办法是setOption: function (Chart) { Chart.clear(); // 清除 Chart.setOption(this.getOption(), true); //获取新数据 },
setOption方法加了一一个true属性。原因如下
原因:chart.setOption(option,notMerge,lazyUpdate);
option:图表的配置项和数据
notMerge:可选,是否不跟之前设置的option进行合并,默认为false,即合并。(这里是导致二次渲染不成功的根本)
lazyUpdate:可选,在设置完option后是否不立即更新图表,默认为false,即立即更新。