我一直在尝试将一个漂亮的D3图表示例(https://jsfiddle.net/thudfactor/HdwTH/)转换为具有新的D3 v4版本的Angular2组件。
但是,以下代码会出现“无法读取null属性文本”的异常:
var textLabels = labelGroups.append("text").attr({
x: function (d, i) {
var centroid = pied_arc.centroid(d);
var midAngle = Math.atan2(centroid[1], centroid[0]);
var x = Math.cos(midAngle) * cDim.labelRadius;
var sign = (x > 0) ? 1 : -1
var labelX = x + (5 * sign)
return labelX;
},
y: function (d, i) {
var centroid = pied_arc.centroid(d);
var midAngle = Math.atan2(centroid[1], centroid[0]);
var y = Math.sin(midAngle) * cDim.labelRadius;
return y;
},
'text-anchor': function (d, i) {
var centroid = pied_arc.centroid(d);
var midAngle = Math.atan2(centroid[1], centroid[0]);
var x = Math.cos(midAngle) * cDim.labelRadius;
return (x > 0) ? "start" : "end";
},
'class': 'label-text'
}).text(function (d, i) { <--------------- exception
return d.data.label;
});
labelgroups是一种选择方式,附加应该起作用,所以问题必须是.attr({})
。但它在jsfiddle中可以正常工作。
D3 v4中语法是否已更改?正确的做法是什么?
selection.attr("x", foo).attr("y", bar).attr("text-anchor", baz).attr("class", foobar);
就像 @Honghe.Wu 这样。 - Gerardo Furtado