だから私は動的に、大まかにこのようにテーブルを構築しています
<tbody ng-repeat="d in data">
<td>{{d.name}}</td>
<td>{{d.dircleColor}}</td>
<td id="a{{d.index}}>{{d.someOtherData}}</td>
...
「data」は、コントローラー内の配列$scope.dataです。基本的なAngularは非常にうまく機能します。
ここで、動的に生成された<td> </ td>の1つにsvg要素(D3.js)を追加する必要もあります。
これらは、同じく$ scope.dataに基づく視覚化に対応している必要があります。これにより、グラフの赤い円がテーブルの赤い円に対応し、ユーザーは情報を探す場所を知ることができます。
私の最大の希望は指令です
.directive('dirCircle', function () {
return function ($scope, elm, attrs) {
var vis = d3.select(elm[0]).append("svg").attr("width", w).
attr("height", h).attr("class", "circlesClass");
node.append("svg:text") [... more styling...]
これは機能しますが、現時点では、小さなsvg-circle要素の色を指示する方法がわかりません。この情報は$scope.data-配列にあります。しかし、$scopeにアクセスするだけでは十分ではありません。描画される「現在の」要素の情報が必要です。それは可能ですか?
これが不可能な場合は、以下の回避策が考えられます。
1)ディレクティブが「自己認識」になり、ディレクティブが配置されているDOMを見回すことができれば、それは役立つ可能性があります。上記のコードで私が持っていることに注意してください<td id="a{{d.index}}>...
IDは文字で始まるため、「a」はそこにあります。d.indexは配列内の関連データを識別するので、ディレクティブから$ scope.dataにアクセスできる場合は...?
2)通常どおりにD3を生成しますが、次のように動的に生成されたテーブルセルに配置します。
for (var i = 0; i < _data.length; i++) {
var svgContainer = d3.select("#a" + _data[i].index).append("svg") //circleData[0].ci
.attr("width", 20)
.attr("height", 20)
.attr("class", "circlesOnTheRight");
動作しますが、「html-template」(ng-repeat / {{...}} --stuff)からの「コンパイル」は常に最後になります。新しい要素が配列に追加された場合、angularが新しいテーブルセルを作成する前に、私の関数は常に起動します。私が試したところ、$scope。$on('includeContentLoaded'、alert( "...")); 角度が完了する前に発砲します。