Ich versuche Angular Datatable Server-Seite Paginierung zu implementieren, aber ich die folgende Fehlermeldung erhalten:Winkeldatentabelle Server Side Paginierung Filterung, totalrecords, sind Daten nicht definiert
TypeError: Cannot read property 'length' of undefined
Als ich tröste das Ergebnis in fabrik alle 89 records sind da, wenn es darum geht, controller und ich konsole ergebnis innerhalb filterService.execute alle Datensätze angezeigt werden. aber wenn ich trete records die tatsächlich bestimmt "drwa, totalrecords, filteredrecords und daten" alles ist undefined außer zeichnen. dies wie:
Object {draw: 1, recordsTotal: undefined, recordsFiltered: undefined, data: undefined}
kann jeder schau Dir und mir sagen, was es ist, ich bin hier falsch tun, würde jede Hilfe im Voraus geschätzt werden. Dank
Controller:
angular.module('withServerSide', ['datatables'])
.controller('withServerSideController', function WithPromiseController($scope, DTOptionsBuilder, DTColumnBuilder, filterService)
{
$scope.dtColumns = [
DTColumnBuilder.newColumn('es_officer_id', 'Id'),
DTColumnBuilder.newColumn('es_officer_name', 'Name')
];
$scope.dtOptions = DTOptionsBuilder
.newOptions()
.withFnServerData(serverData)
.withDataProp('es_officers') //Tried 'data' as well
.withOption('processing', true)
.withOption('serverSide', true)
.withOption('paging', true)
// .withOption('rowCallback', rowCallback)
.withPaginationType('numbers')
.withDisplayLength(10)
.withDOM('<"top">t<i"bottom"p><"clear">');
function serverData(sSource, aoData, fnCallback, oSettings) {
//All the parameters you need is in the aoData variable
var draw = aoData[0].value;
var order = aoData[2].value;
var start = aoData[3].value;
var length = aoData[4].value;
//Then just call your service to get the records from server side
filterService.execute(start, length, order).then(function(result){
console.log(result);
var records = {
'draw': draw,
'recordsTotal': result.total,
'recordsFiltered': result.filtered,
'data': result.records
};
fnCallback(records);
});
}
});
Filterservice Factory:
angular.module('Main_Module').factory('filterService', filterService);
filterService.$inject = ['$q', '$http']
function filterService($q, $http)
{
var service = {
execute: execute
};
return service;
function execute(start, length, order)
{
var defered = $q.defer();
//Make a request to backend api and then call defered.resolve(result);
$http({
url : 'http://localhost:3000/api/SELECTSpecific/es_officers',
method: 'GET'
})
.then(function successCallback (result)
{
console.log(result);
defered.resolve(result);
});
return defered.promise;
}
};
HTML:
<div ng-controller="withServerSideController">
<table class="table table-striped table-bordered" align="center" datatable="" dt-options="dtOptions" dt-columns="dtColumns" class="row-border hover">
</table>