私は、私たちのサイトの標準テーブルレイアウトを扱う一連のディレクティブを構築しようとしています。このために、テーブル用とカラム用の2つのディレクティブを作成しました。 ここでの目標は、親ビュー内のテーブルの列を指示することです。親ディレクティブビューからデータにアクセスするにはどうすればよいですか?
次に、ディレクティブをインスタンス化する親ビュー(index.html)を示します。 col-name
は、表の各行に表示する属性を示します。
<management-grid>
<col-data col-name="name"></col-data>
</management-grid>
managementGrid
指示の関連する部分は次のとおりです。
.directive('managementGrid', function() {
return {
...
template:
'<table>' +
'<tbody>' +
'<tr ng-repeat="row in collection" ng-transclude="data">' +
'<!--The specific columns go here using col-data-->' +
'</tr>' +
'</tbody>' +
'</table>',
transclude: {
'data': '?colData'
},
controller: ($scope) => {
$scope.collection = [{'name': 'Test Row 1'},{'name': 'Test Row 2'}];
}
};
});
そして本当に唯一のディレクティブは、レンダリングする前にブラウザがそれを破棄しないようにtd
タグに変換するために使用された子ディレクティブ。最終指令colData
で
.directive('colData', function() {
return {
...
scope: {
colName: '@'
},
template: '<td>{{colName}}: {{row[colName]}}</td>'
};
});
、row
オブジェクトにアクセスできません。私は親コントローラにアクセスするためにリンク機能を使用することができますが、それは私にcollection
にアクセスすることを許可し、を使用して作成されたrow
にアクセスする必要があります。
ここには、問題を示すFiddleがあります。
編集: 理想的には、私は単にでプロパティ名を渡す必要がcolData
ディレクティブにtranscludeとができませんでした<td ng-transclude></td>
ような何かと親ビューで<col-data>{{row.name}}</col-data>