Javascript D3js路径更新进入和退出
我错过了什么?Javascript D3js路径更新进入和退出,javascript,d3.js,svg,Javascript,D3.js,Svg,我错过了什么? 我允许用户删除和绘制自己的数据点。我的直线路径就是用这个画的,效果很好 let self = this; let line = D3['line']() .x(function (d) { return self.getColX(d.x); }) .y(function (d) { return self.getRowY(d.y); }); this.group = this.canvas.appe
我允许用户删除和绘制自己的数据点。我的直线路径就是用这个画的,效果很好
let self = this;
let line = D3['line']()
.x(function (d) { return self.getColX(d.x); })
.y(function (d) { return self.getRowY(d.y); });
this.group = this.canvas.append("g")
.attr("transform", "translate(25,25)");
//bind the data
this.group.selectAll("path")
.data(this.data[this.site].drawLine)
.enter()
.append("path")
.attr("d", line)
.attr("fill", "none")
.attr("stroke", "black");
this.group.selectAll('path').exit().remove()
我的问题是,如果我弹出最后一个坐标并添加一个新的坐标,调用draw函数,新的点被正确添加,但旧的点不会被删除
例如:我的行从(x,y):(1,3)到(3,6)到(7,8),如果我移除(7,8)并将其替换为5,6。我将看到一个从(3,6)到(5,6)的新行,但是从(3,6)到(7,8)的行不再在数据数组中 D3将您的选择与提供的数据进行比较后,将创建enter()
和exit()
选择。因此,在回复这些电话时可以使用:
this.group.selectAll("path")
.data(this.data[this.site].drawLine)
这就是添加新数据的原因,enter()
工作正常
使用this.group.selectAll('path').exit().remove()
可以创建新的选择,但不会将选择与任何数据进行比较,因此enter()
和exit()
选择不可用
长话短说,只需将.exit().remove()
应用到您的初始选择中,它就会起作用。大概是这样的:
let update = this.group.selectAll("path")
.data(this.data[this.site].drawLine)
update.enter()
.append("path")
.attr("d", line)
.attr("fill", "none")
.attr("stroke", "black")
update.exit()
.remove()
这对你有帮助吗?您的回答进行得很顺利,但随后您突然将
exit()
链接到“输入”选项。“你认为这有用吗?”杰拉尔多福塔多·沃西·戴西,谢谢你的头up@GeradoFutado,我是否用;?打破股票和退出之间的转换;?这就是你的意思吗?@chungtinhlakho不,在编辑答案之前,我只是在处理前面的代码。现在答案是肯定的。