小程序引入方式官网有教程,参考支付宝小程序引入。
遇到的问题如下:
1.图表刷新:
请求到数据给到图表时,图表未刷新,使用:
Charts.changeData(data);//data为后端数据
Charts.repaint();//更新图表
//两个要一起用才行
2.饼图中PieLabel引入报错,最终引入如下:
const PieLabel = require('@antv/f2/lib/plugin/pie-label');
F2.Chart.plugins.register([ PieLabel ]);//引入 PieLabel
3.饼图内放文字,这个官网有放icon的例子,我们需求中要求加上数据,其实官网代码只看懂了部分,我作了部分改动,也算实现了需求。样式如下:
以下是部分代码:
function _getEndPoint(center, angle, r) {
return {
x: center.x + r * Math.cos(angle),
y: center.y + r * Math.sin(angle)
};
}
var _F = F2,
Shape = _F.Shape,
Util = _F.Util,
G = _F.G;
var Vector2 = G.Vector2;
Shape.registerShape('interval', 'pie-with-icon', {
draw: function draw(cfg, container) {
var points = this.parsePoints(cfg.points);
var style = Util.mix({
fill: cfg.color
}, cfg.style);
var coord = this._coord;
if (cfg.isInCircle && coord.transposed) {
// 只处理极坐标y
var newPoints = [points[0], points[3], points[2], points[1]];
var _cfg$center = cfg.center,
x = _cfg$center.x,
y = _cfg$center.y;
var v = [1, 0];
var v0 = [newPoints[0].x - x, newPoints[0].y - y];
var v1 = [newPoints[1].x - x, newPoints[1].y - y];
var v2 = [newPoints[2].x - x, newPoints[2].y - y];
var startAngle = Vector2.angleTo(v, v1);
var endAngle = Vector2.angleTo(v, v2);
var r0 = Vector2.length(v0);
var r = Vector2.length(v1);
if (startAngle >= 1.5 * Math.PI) {
startAngle = startAngle - 2 * Math.PI;
}
if (endAngle >= 1.5 * Math.PI) {
endAngle = endAngle - 2 * Math.PI;
}
var middleAngle = (startAngle + endAngle) / 2;
var numbricCenter = _getEndPoint(cfg.center, middleAngle, (r + r0) / 2);
var sector = container.addShape('Sector', {
className: 'interval',
attrs: Util.mix({
x: x,
y: y,
r: r,
r0: r0,
startAngle: startAngle,
endAngle: endAngle
}, style)
});
var text = container.addShape('text', {
attrs: {
x: numbricCenter.x,
y: numbricCenter.y,
textAlign: 'center',
textBaseline: 'middle',
fontSize: that.props.componentProps.upwardFont,
text:cfg.origin._origin.rate+'%', //这里是要显示的数据
fill: that.props.componentProps.upwardColor,
fontWeight: '400'
}
});
return [sector,text];
}
}
});
4.柱状图平移,需要用到interaction,这个在引入过程中报错,未解决。