更新enter()。append()块d3.js中的数据

时间:2014-07-10 12:08:18

标签: javascript d3.js angularjs-directive

我正在使用D3js和AngularJS进行交互式视觉处理,以便从Web服务等进行数据检索。

视觉效果基于分区布局。它接收一个3级嵌套JSON对象,使用d3.partition()。nodes(JSON)转换为节点。

当最初加载visual时,它会在enter()。append()块中的节点上设置一些额外的属性,如下所示:

 scope.path = viz.selectAll("path")
  .data(nodes, function(d){ return d.pk; }); // Make sure to have a unique id

 scope.path.enter().append("path")
  .attr("d", function(d){
    // if selected or one of the children is selected, slide out
    if(d.selected || d.childrenSelected ){ d.dy = 0.4; }
    return arc(d);
  });

在我使用AngularJS之前,这对我有用,因为节点中的每个节点都是通过我假设的参考来评估的。因此,每当更改渲染的节点时,节点集合中的节点都会更改(它们是相同的)。

使用AngularJS这个小系统停止工作,我正在重新思考这个方法。我希望只修改enter()。append()块之外的数据。我的问题是什么是一个很好的方法,我应该如何重新渲染视觉?节点的数据在点击时会发生变化,也可能对父节点产生影响。

感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

有些想法,希望你认为这些有用。如果您计划更改Angular模型中使用的数据,请务必在更改数据后运行$ digest(在某些情况下可能需要消耗资源)或使用$ watch跟踪变量的变化并在需要时执行操作(例如,在变量改变后重新渲染视觉效果)。否则,Angular不知道这些变化。

这些链接可能会有所帮助:
http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/
http://www.benlesh.com/2013/08/angularjs-watch-digest-and-apply-oh-my.html