我试图将AngularJS和D3集成到一个应用程序中,该应用程序允许您绘制,拖动和调整形状。我试图用angular来绑定属性,以避免手动更新DOM,但它不起作用。
我有以下代码来创建一个矩形。基本上,我创建了一个SVG group
对象,该对象具有应该绑定到范围变量的transform属性。然后我追加rect
到该组:
var drawSquare = function() {
console.log("DrawSquare");
var id = uuid.v4();
scope.objects[id] = { x: 0, y: 0, w: 40, h: 40 };
var parent = d3.select(document.createElementNS("http://www.w3.org/2000/svg", "g"))
.attr("id", id)
.attr("transform", "translate({{objects['" + id + "'].x}}, {{objects['" + id + "'].y}})");
var element = parent.data([scope.objects[id]])
.append("rect")
.call(drag)
.call(click);
setSquareAttrs(element, id);
//.attr(defaultSquare);
console.log("parent", parent.node());
$compile(parent.node())(scope);
console.log("parent", parent.node());
container.node().appendChild(parent.node());
};
我创建SVG group
元素,具有角编译它,然后将其附加到DOM。我的拖动处理程序更新了DOM对象应该绑定到的scope
中的Angular对象。
我拖动处理程序如下:
// Main drag function.
var drag = d3.behavior.drag()
.on("drag", function (d) {
console.log("dragmove!", d3.event.x, d3.event.y);
var id = d3.select(this.parentNode).attr("id");
console.log("id", id);
console.log("scopeobjects", scope.objects[id]);
scope.objects[id].x = d3.event.x;
scope.objects[id].y = d3.event.y;
});
当我登录我的范围对象在控制台中,我可以看到它正在更新。但是,我的group
元素上的transform
属性卡住了0,0。有人看到任何明显错误的东西吗?在Angular插入绑定似乎没有更新之前,有没有人遇到过这样的情况?
谢谢。
是你在拖曳函数中遇到的问题,如果你分享plunker或fiddle demo –