具有动态id的Angularjs指令将不允许附加d3

时间:2018-04-12 20:33:35

标签: angularjs d3.js

我发现了一个问题,我有一个angularJS指令,当我指定一个硬编码ID时,它能够在下面的情况下追加,但是当它动态形成时,追加并不实际附加。 d3或浏览器不会抛出任何错误,但是如果你查看DOM,你会发现这些元素从未添加过。要清楚,第一行确实在两种情况下都返回一个对象。

library(sp)
library(data.table)

setDT(d_zone2)

stop_points <- as.matrix(stops[, 3:2])
short <- unique(d_zone2, by = c("Long", "Lat"))
short[, ZONE := stops[which.min(spDists(x = stop_points, y = cbind(Long, Lat))),]$X8, by=.(Long, Lat)] 

指令电话:

var svg = d3.select(id)
svg.append("g")

指令模板:

<ns-my-directive width="960" height="200" uid="graph{{$index}}" data="d"></ns-my-directive>

指令js:

<svg data-ng-attr-id="{{uid}}" class='form-group' width="{{width}}" height="{{height}}"></svg>

1 个答案:

答案 0 :(得分:0)

实际问题是d3.select()返回一个对象,无论它是否存在。真正的问题是,角度控制器代码是在模板填充变量之前执行的。解决方案如下:

controller: function($scope, $timeout){
    $timeout(function(){
        var id = $scope.uid;
        var svg = d3.select(id)
        svg.append("g")
    })
})