在tooltip下的formatter中可以调用我们自己封装的函数,我们打印出来发现,value其实是所有的信息集合,而我们可以选择自己所需要的数据进行处理。根据后台返回的数据,我们直接在echarts显示层处理数据。
先上代码:
tooltip: {
trigger: 'axis',
formatter: function(value){
//这里的value[0].value就是我需要每次显示在图上的数据
if (value[0].value <= 0) {
value[0].value = '0B';
}
else{
var k = 1024;
var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
//这里是取自然对数,也就是log(k)(value[0].value),求出以k为底的多少次方是value[0].value
var c = Math.floor(Math.log(value[0].value) / Math.log(k));
value[0].value = (value[0].value / Math.pow(k, c)).toPrecision(3) + ' ' + sizes[c];
}
//这里的value[0].name就是每次显示的name
return value[0].name +"<br/>"+"流量为:"+value[0].value;
}
}
但其实想要最终的目的是将整个处理数据添加单位的过程封装在一个方法中,在formatter中调用这个函数,
总结一下,考虑代码优化问题,主要有两个方法:
(1)在接收后端数据的时候就调用封装的方法把数据处理完成后再返回给formatter中。
(2)在formatter中调用函数,可以这样写:
var self = this;
//在formatter中调用method里封装的方法
formatter: function(value){
//其中data_addition_unit为我们自己封装的数据处理方法
value[0].value = self.data_addition_unit(value[0].value)
return value[0].name +"<br/>"+"流量为:"+value[0].value;
}
//在data_addition_unit方法中:
methods: {
data_addition_unit(value){
if (value <= 0) {
value = '0B/s';
}
else{
var k = 1024;
var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
var c = Math.floor(Math.log(value) / Math.log(k));
value = (value / Math.pow(k, c)).toFixed(2) + ' ' + sizes[c] + '/s';
}
return value
},
}