AngularJS を使用して SVG 属性をバインドしようとしています。形状のサイズ変更ハンドルの次のコードがあります。
// S handle.
var s_handle = d3.select(document.createElementNS("http://www.w3.org/2000/svg", "rect"))
.attr("id", "s-resize")
.attr("x", "{{(objects['" + id + "'].w - (scope.dragHandle.width / 2))}}")
.attr("y", "{{(objects['" + id + "'].h - (scope.dragHandle.width / 2))}}")
.attr(scope.dragHandle)
.attr("cursor", "s-resize")
.call(sresize);
$compile(s_handle.node())(scope);
element.append(s_handle);
このコードを実行すると、次のエラーが発生します。
Error: Invalid value for <rect> attribute x="{{(objects['9b320170-6365-4f40-801d-a7a5c6b936f9'].w - (scope.dragHandle.width / 2))}}" d3.min.js:1
Error: Invalid value for <rect> attribute y="{{(objects['9b320170-6365-4f40-801d-a7a5c6b936f9'].h - (scope.dragHandle.width / 2))}}" d3.min.js:1
問題を特定するために追加手順を削除しようとしましたが、Angular コンパイル段階の前であっても、属性x
と属性を設定すると問題が実際に発生するようです。y
このメソッドtransform
は、文字列をネイティブに受け入れる属性を使用して別の SVG オブジェクトで動作することに注意してください。
以前にこの問題に遭遇した人はいますか? 解決策はありますか?ありがとうございました。
編集:ステップスルーして、 $compile` は実際には要素をまったく変更していないようです。これは、要素が無効である可能性がありますか?