2016-05-25 4 views
0

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> 

Antwort

0

OK, also habe ich herausgefunden, dass es für andere in Zukunft nützlich sein kann, ich mache einen Fehler, wenn ich meine URL anrufe und die entsprechenden Parameter nicht sende.

Was ich rufe ist:

$http({ 
     url : 'http://localhost:3000/api/SELECTSpecific/es_officers', 
     method: 'GET' 
    }) 

Was soll ich tun, ist:

$http({ 
    url : 'http://localhost:3000/api/SELECTQPromise/es_officers/'+start+'/'+limit+'/'+order+'/'+search, 
    method: 'GET' 
    }) 

Lösung:

Ich weiß, dass ich wasn‘ t sogar senden die Parameter, die Start, Limit, Reihenfolge, se sind Bogen