<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="//cdn.datatables.net/1.10.1/css/jquery.dataTables.css" />
<style>
table.dataTable td {
vertical-align: top;
}
</style>
</head>
<body ng-app="datatablesSampleApp" ng-controller="sampleCtrl">
<table datatable dt-options="dtOptions" dt-columns="dtColumns" class="table table-striped table-bordered">
</table>
<script data-require="jquery@1.10.1" data-semver="1.10.1" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="//cdn.datatables.net/1.10.1/js/jquery.dataTables.js"></script>
<script type="text/javascript" src="http://code.angularjs.org/1.6.9/angular.js"></script>
<script type="text/javascript" src="https://rawgithub.com/l-lin/angular-datatables/v0.6.1/dist/angular-datatables.js"></script>
<script type="text/javascript" src="https://rawgithub.com/a8m/angular-filter/master/dist/angular-filter.js"></script>
<script src="script.js"></script>
</body>
</html>
(function(angular) {
'use strict';
angular.module('datatablesSampleApp', ['datatables', 'angular.filter']).
controller('sampleCtrl', function($scope, $q, $http, $compile, DTOptionsBuilder, DTColumnBuilder, DTColumnDefBuilder) {
$scope.buttonClick = function() {
alert('clicked')
}
$scope.dtOptions =
DTOptionsBuilder.fromFnPromise(function() {
var defer = $q.defer();
$http({
method: 'GET',
url: 'issues.json'
}).then(function(result) {
var data = [];
result.data.forEach(function(i) {
var item = data.find(item => item.IssueId == i.IssueId)
if (item) {
item.childs.push(i)
} else {
data.push({
IssueId: i.IssueId,
Issue: i.Issue,
MeetingNo: i.MeetingNo,
childs: [i]
})
}
})
defer.resolve(data);
})
return defer.promise;
})
$scope.dtColumns = [
DTColumnBuilder.newColumn(null).withTitle('No')
.withOption('createdCell', function(cell, cellData, rowData, rowIndex, colIndex) {
if (rowData.AnswerStatus == 1) $(cell).addClass('read')
})
.renderWith(function(data, type, full, meta) {
return (meta.row+1);
}),
DTColumnBuilder.newColumn('Issue').withTitle('Issue'),
DTColumnBuilder.newColumn('MeetingNo').withTitle('Meeting No.'),
DTColumnBuilder.newColumn(null)
.withTitle('Department/Unit')
.renderWith(function(data, type, row, meta) {
var html = '<table><tbody>';
row.childs.forEach(function(child) {
html += '<tr><td>'+child.Department+'/'+child.Unit+'</td></tr>'
html += '<tr><td><button ng-click="buttonClick()">click</button></td></tr>'
})
html += '</tbody></table>'
return html
})
.withOption('createdCell', function(cell, cellData, rowData, rowIndex, colIndex) {
$compile(cell)($scope);
})
];
});
})(angular);
[{
"IssueId": "1",
"MeetingNo": "1",
"Issue": "Issue title 1",
"Content": "Content 1",
"AnswerStatus": null,
"UnitId": 1,
"Unit": "Unit 1",
"DepartmentId": 1,
"Department": "Department 1"
}, {
"IssueId": "2",
"MeetingNo": "1",
"Issue": "Issue title 2",
"Content": "Content 2",
"AnswerStatus": null,
"UnitId": 5,
"Unit": "Unit 5",
"DepartmentId": 1,
"Department": "Department 1"
}, {
"IssueId": "2",
"MeetingNo": "1",
"Issue": "Issue title 2",
"Content": "Content 2",
"AnswerStatus": 1,
"UnitId": 6,
"Unit": "Unit 6",
"DepartmentId": 1,
"Department": "Department 1"
}]