我正在使用Angular Datatables和jquery数据表来填充我的json数据。无法使用DTColumnBuilder.withnewColumn()访问json数据。我已经尝试了几次但无法弄明白,任何人都可以帮我解决这个问题。
$scope.dtOptions = DTOptionsBuilder.fromFnPromise( multishiftService.fetchfunds())
.withPaginationType('extStyle')
.withDOM ( '<"top"iflp<"clear">>rt<"bottom"iflp<"clear">>' )
.withOption('bFilter', false)
.withOption('bInfo',false);
$scope.dtColumns = [
DTColumnBuilder.newColumn('contracts.contracts[0].productGroup').withTitle('Fund Name'),
DTColumnBuilder.newColumn(null).withTitle('Transfer %')
];
$scope.dtColumnDefs = [
DTColumnDefBuilder.newColumnDef(0).renderWith(function(data, type, full) {
return '<a href="#">' + data + '</a>';
}),
DTColumnDefBuilder.newColumnDef(1).renderWith(function(data, type, full) {
return '<input class="inputs txtFunds dt-body-center" type="text"/> %';
})
];
我的HTML代码是:
<table datatable="" dt-options="dtOptions" dt-columns="dtColumns" dt-column-defs="dtColumnDefs" cellspacing="0" width="100%" class="display fundsTable row-border hover">
</table>
示例json数据:
{
"contracts": {
"contracts": [
{
"productGroup": "American Legacy",
"restrictionCode": "",
"restrictionDesc": "",
"owners": [
{
"address": {
"line1": "1541 EAST PALESTINE ROAD",
"line2": null,
"line3": null,
"line4": null,
"line5": null,
"city": "PALESTINE",
"state": "TX",
"zip": "75801-732"
},
"lastName": "ANAND",
"firstName": "MANUSHRIFA11",
"state": "TX",
"roleCode": "8",
"lastNameFirstName": "ANAND, MANUSHRIFA11"
}
],
"effectiveDate": "02/19/2008",
"effectiveDateValue": 1203359400000,
"effectiveDateValueStr": "02/19/2008",
"valuationDate": 1412706600000,
"valuationDateStr": "10/08/2014",
"riders": [
""
],
"serviceFeatures": [
"N/A"
],
"contract": "957097001",
"lob": "VARIABLE ANNUITY- <br>AM LEGACY FUSION",
"productFamily": null,
"value": 212793.24,
"clients": [
{
"clientType": "Annuitant",
"lastName": "ANAND",
"firstName": "MANUSHRIFA11",
"birthDate": "10/25/1951",
"roleCode": "35",
"lastNameFirstName": "ANAND, MANUSHRIFA11",
"ageSevntyAndHalf": false,
"genderCode": "F"
}
],
"marketTypes": null,
"active": true,
"producerName": "KENNETH FREE",
"primaryInsuredDob": "10/25/1951",
"primaryInsuredGenderCode": "F",
"primaryOwnerState": "TX",
"faceAmt": 0,
"indivCompany": "Individual"
},
{
"productGroup": "American Legacy",
"restrictionCode": "",
"restrictionDesc": "",
"owners": [
{
"address": {
"line1": "1 MADISON AVE",
"line2": null,
"line3": null,
"line4": null,
"line5": null,
"city": "NEW YORK",
"state": "NY",
"zip": "100103603"
},
"lastName": "",
"firstName": "EDWARD JONES",
"state": "NY",
"roleCode": "8",
"lastNameFirstName": "EDWARD JONES"
}
],
"effectiveDate": "01/01/2005",
"effectiveDateValue": 1104517800000,
"effectiveDateValueStr": "01/01/2005",
"valuationDate": 1412706600000,
"valuationDateStr": "10/08/2014",
"riders": [
""
],
"serviceFeatures": [
"N/A"
],
"contract": "958410707",
"lob": "VARIABLE ANNUITY- <br>AM LEGACY 3",
"productFamily": null,
"value": 133469.72,
"clients": [
{
"clientType": "Annuitant",
"lastName": "NAVEN",
"firstName": "KUMARFA11",
"birthDate": "02/28/1941",
"roleCode": "35",
"lastNameFirstName": "NAVEN, KUMARFA11",
"ageSevntyAndHalf": true,
"genderCode": "M"
}
],
"marketTypes": null,
"active": true,
"producerName": "KENNETH FREE",
"primaryInsuredDob": "02/28/1941",
"primaryInsuredGenderCode": "M",
"primaryOwnerState": "NY",
"faceAmt": 0,
"indivCompany": "Company"
}
]
}
}
答案 0 :(得分:0)
默认情况下,Angular-datatables会查找数组作为数据。 如果您的数据嵌套在对象中,则需要提供AjaxDataProp。
在您的情况下,您应该在DT选项中添加withDataProp
:
$scope.dtOptions = DTOptionsBuilder.fromFnPromise( multishiftService.fetchfunds())
.withDataProp('contracts.contracts')
.withPaginationType('extStyle')
.withDOM ( '<"top"iflp<"clear">>rt<"bottom"iflp<"clear">>' )
.withOption('bFilter', false)
.withOption('bInfo',false);
此外,在定义列时,您不需要指定嵌套属性:
$scope.dtColumns = [
DTColumnBuilder.newColumn('productGroup').withTitle('Fund Name'),
DTColumnBuilder.newColumn(null).withTitle('Transfer %')
];