次のようなカスタムテーブル要素を作成しようとしています。
<datatable items='tableItems' columns='columnsConfig' />
ここで、「tableItems」はアイテムの配列であり、「columnsConfig」は列レンダリングの構成です。次のようになります。
$scope.tableItems = [...];
$scope.columnsConfig = [
{
name: 'check',
with: '20px',
renderer: function (rowItem, cellValue) {
return '<input ng-click="clickHandler()" type="checkbox"/>';
}
},
{name: "person.fullName", text: "Name", visible: true, width: '150px'},
{
name: "person.age",
text: "Age",
renderer: function(rowItem, cellValue) {
return cellValue + ' years old';
}
}
];
レンダラー関数内で、追加のデータ処理またはテンプレートを指定できます。
私のディレクティブテンプレートには、次のものがあります。
<tbody>
<tr ng-repeat="item in items">
<td ng-repeat="column in columns"
ng-show="column.visible"
ng-bind-html-unsafe="getCellValue(item, $index)">
</td>
</tr>
</tbody>
'getCellValue'関数内で、レンダラー関数を呼び出します。ディレクティブコードは次のとおりです。
angular.module('components', [])
.directive('datatable', function () {
return {
restrict: 'E',
templateUrl: '../pages/component/datatable.html',
scope: {
items: "=",
columns: "="
},
controller: function ($scope, $element) {
$scope.getCellValue = function (item, columnIndex) {
var column = $scope.columns[columnIndex];
// return render function result if it has been defined
if (column.renderer) {
return column.renderer(item, getItemValueByColumnName(item, column.name));
}
// return item value by column
return getItemValueByColumnName(item, column.name);
};
}
}
});
ng-...ディレクティブを除いてすべて正常に動作します。$ compileなどを使用して「レンダラー」関数の結果をさらに処理する必要があると思いますが、それでもこれを実現する方法がわかりません。したがって、問題は、レンダラー関数を介して指定したときにngディレクティブをどのように機能させるかということです。
ありがとう。