您可以檢查這裏的工作示例:http://jsfiddle.net/fRgtF/3/ 基本上你需要做的針對範圍控制器內的一切:
function Controller($scope){
$scope.$watch("px",function(){
d3.select('svg').remove();
var limacon = d3.select(".limacon").append("svg");
x0 = 300;
y0 = 250;
r = 50;
px = $scope.px;
limacon.append("circle")
.attr("cx", x0)
.attr("cy", y0)
.attr("r", r)
.attr("stroke", "#FFCC66")
.attr("stroke-width", 2)
.attr("fill", "none");
for (var k = 0; k < 20; k++) {
limacon.append("circle")
.attr("cx", x0 + r * Math.cos(2 * Math.PI * 0.05 * k))
.attr("cy", y0 + r * Math.sin(2 * Math.PI * 0.05 * k))
.attr("r", r * Math.sqrt(Math.sin(2 * Math.PI * 0.05 * k) * Math.sin(2 * Math.PI * 0.05 * k) + (Math.cos(2 * Math.PI * 0.05 * k) - px/r) * (Math.cos(2 * Math.PI * 0.05 * k) - px/r)))
.attr("stroke", "steelblue")
.attr("stroke-width", 1)
.attr("fill", "none");
}
limacon.append("circle")
.attr("cx", x0 + px)
.attr("cy", y0)
.attr("r", 1)
.attr("stroke", "#66CC66")
.attr("stroke-width", 2)
.attr("fill", "#66CC66");
});
}
您的滑塊正在修改範圍上的px值,這是我們使用的值。我們觀察範圍內的px值,並根據新的px值重做我們的d3工作。
您不應該像這樣在控制器內部修改DOM。這種類型的代碼屬於指令。 – btford 2013-03-17 07:38:49
是的,這將是最佳做法。 – basarat 2013-03-18 00:08:01