マークアップを正規化して、さまざまなデータ ソースを受け入れることができるテーブル ディレクティブに取り組んでいます。rows
データ オブジェクトが独自の子を持つことができるという問題に遭遇しました。この SO postを使用して、必要な HTML を生成する再帰関数を含む新しいディレクティブを作成しました。
<nested-rows rows="rows" columns="columns"></nested-rows>
ただし、行データの動的な性質のため、td を静的に定義していません。
歴史的に、私はこれをしました:
<td ng-repeat="column in columns">
<cell-content renderer-id="column.rendererId" content="row[column.id]">
</cell-content>
</td>
単純に列配列を反復し、row.someColumn の値を別のディレクティブに渡して、さまざまなセル コンテンツ (リスト、ボタン、アイコンなど) を生成します。ここrow.someColumn
には、その特定の列/列に必要なデータが含まれています。タイプ。
私が抱えている問題は、この新しいディレクティブにあります。もう変数がrow
ないので、呼び出しrow[column.id]
は未定義を返します。これが私の指示です:
.directive('nestedRows', function($compile) {
return {
restrict: 'EA',
replace: true,
link: function(scope, element, attrs) {
var html = "";
var recursive = function(rows) {
angular.forEach(rows, function(row, index) {
html +=
'<tr>' +
'<td ng-repeat="column in columns">' +
'<cell-content renderer-id="column.rendererId"' +
'content="row[column.id]"></cell-content>' +
'</td>' +
'</tr>';
if(row.children) {
recursive(row.children);
}
})
}
if(attrs && attrs.rows) {
recursive(attrs.rows);
}
element.html(html);
$compile(element.contents())(scope);
}
}
})
私がする必要があるのは、適切なデータを cellContent ディレクティブに渡すことです。これどうやってするの?