我正在将d3.js集成到我的角度应用程序中。
这是我的ngOnInit
ngOnInit() {
this.dragger = d3.drag()
.on("drag", () => this.handleDrag())
.on("end", () => this.endDrag());
}
调用this.dragger的功能
closePolygon() {
this.floorOnly.select('g.drawPoly').remove();
var g = this.floorOnly.append('g');
g.append('polygon')
.attr('points', this.points)
.style('fill', this.getRandomColor());
for(var i = 0; i < this.points.length; i++) {
var circle = g.selectAll('circles')
.data([this.points[i]])
.enter()
.append('circle')
.attr('cx', this.points[i][0])
.attr('cy', this.points[i][1])
.attr('r', 4)
.attr('fill', '#FDBC07')
.attr('stroke', '#000')
.attr('is-handle', 'true')
.style({cursor: 'pointer'})
.call(this.dragger);
this.coorDinates.push([this.points[i][0], this.points[i][1]]);
}
}
其他相关功能
endDrag() {
this.dragging = false;
}
handleDrag() {
console.log('entered handleDrag, will do dragging code here');
}
我在 closePolygon()函数中的 .call(this.dragger) 中遇到问题。我一直收到这个错误
g.selectAll(...)。数据(...)。输入(...)。追加(...)。ATTR(...)。ATTR(...)。ATTR(。 ..)。ATTR(...)。ATTR(...)。ATTR(...)。样式(...)。电话 不是一个功能
之前当我使用 d3.js版本3 时,它运行正常,代码是 d3.behavior.drag() ,但是现在当我更改为版本4 ,并且新代码为 d3.drag() 时,我的代码不再有效了。我错误地打电话了吗?我尝试了很多不同的方法,但仍然没有运气。或者我错过了什么?
谢谢。
答案 0 :(得分:2)
之所以发生这种情况,是因为您调用.call
的元素是一个没有调用属性的对象(或者它有它,但它不是函数)。
但是,如何修复取决于问题的真正原因。
但是,这些是我解决问题的一般建议:
i
console.log
.call
不是函数的元素Function.prototype.call
实施,.call
很可能是有意的。这告诉我们.call
定位的元素应该是function
,因此它缩小了调用链的预期返回值。 this.points
和每个[i]
是您所期望的事实。我稍微验证了二维数组