Довольно хороший ответ от @jbll. Но, вероятно, будет лучше связать компиляцию директивы с концом этапа ввода. Важно иметь фазы ввода и фазы обновления, чтобы графика могла реагировать на обновления данных без повторного создания каждого элемента. В предыдущем ответе каждая директива на каждом узле компилировалась бы всякий раз, когда модель изменялась. Это может быть то, что нужно, но, вероятно, нет.
Следующий код показывает обновление графики d3 при каждом изменении переменной $scope.nodes.
Это также немного аккуратнее, потому что не требует удаления и воссоздания исходной директивы, что выглядит как хак.
Вот скрипка
Добавьте кнопку в html:
<button ng-click="moveDots()">Move the dots</button>
А затем измените файл JavaScript на:
var myApp = angular.module('myApp', ['ui.bootstrap']);
myApp.controller('myCtrl', ['$scope', function($scope){
$scope.nodes = [
{"name": "foo", x: 50, y: 50},
{"name": "bar", x: 100, y: 100}
];
$scope.moveDots = function(){
for(var n = 0; n < $scope.nodes.length; n++){
var node = $scope.nodes[n];
node.x = Math.random() * 200 + 20;
node.y = Math.random() * 200 + 20;
}
}
}]);
myApp.directive('myNodes', ['$compile', function ($compile) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var mySvg = d3.select(element[0])
.append("svg")
.attr("width", 250)
.attr("height", 250);
renderDots();
scope.$watch("nodes", renderDots, true);
function renderDots(){
// ENTER PHASE
mySvg.selectAll("circle")
.data(scope.nodes)
.enter()
.append("circle")
.attr("tooltip-append-to-body", true)
.attr("tooltip", function(d){
return d.name;
})
.call(function(){
$compile(this[0].parentNode)(scope);
});
// UPDATE PHASE - no call to enter(nodes) so all circles are selected
mySvg.selectAll("circle")
.attr("cx", function(d,i){
return d.x;
})
.attr("cy", function(d,i){
return d.y;
})
.attr("r", 10);
// todo: EXIT PHASE (remove any elements with deleted data)
}
}
};
}]);
person
dave walker
schedule
06.06.2014
angular
для добавления HTML в DOM (через директиву), то этот ответ должен помочь: stackoverflow.com/questions/19656365/ Опубликуйте еще немного кода о как этот элемент DOM добавляется. - person musically_ut   schedule 10.12.2013