无法将attr与D3 v4中的对象一起使用
Cannot use attr with an object in D3 v4
我一直在尝试转换一个不错的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中的语法有变化吗?怎么会是正确的呢?
新答案
由于d3-selection-multi
已被弃用,因此适当的解决方案只是使用常规的attr
方法:
selection.attr("foo", foo)
.attr("bar", bar)
etc...
上一个答案
从D3 v4开始,不能再使用对象设置attr
或style
。为此,您必须参考迷你库D3选择multi:
<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>
完成后,将代码从attr
更改为attrs
(是的,就像复数一样):
var textLabels = labelGroups.append("text").attrs({
//mind the 's' here-------------------------ˆ
});
对样式也要这样做:它应该是styles
,作为复数,而不是style
。
如果你不想改变这一切,只需按照";常规的";方式:将x
、y
、text-anchor
、class
分别设置在单独的attr
中。
以下是selection-multi
文档:https://github.com/d3/d3-selection-multi/blob/master/README.md#selection_attrs
相关文章:
- 如何将Underscore.js过滤器与对象一起使用
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- ASP.NET MVC - 将 PartView 与另一个对象一起返回给 Ajax
- 将jQuery与我自己的文档对象一起使用
- IndexOf 不能与包含数组的对象一起正常工作
- 将引导工具提示与 SVG 对象一起使用 - 尽管指定了容器,但不显示
- 将jQuery砖石与绝对定位的父对象一起使用
- 如何使与jquery延迟对象一起工作的函数表现得像同步函数
- Array.prototype.map.bind与对象一起使用是否可靠
- Backbone将Undercore模板与辅助对象一起使用
- Expressjs-有没有一种方法可以让helper函数与req,res对象一起使用
- 是将数据作为属性附加到延迟对象,还是将数据与延迟对象一起发送到执行解析的函数
- ChartJs不能与这个JSON对象一起工作
- 与对象一起继承子对象
- 美元.扩展不能与数组和in对象一起工作
- 无法将attr与D3 v4中的对象一起使用
- 如何将两个jquery对象一起设置动画
- React:您可以将setState与现有的状态对象一起使用吗
- Pixi.js你如何将moveTo与OOP对象一起使用
- 为什么我的代码不能与播放器对象一起工作