2014-06-08 21 views
6

Witam Próbuję dowiedzieć się, jak zrobić strony po stronie serwera z angularjs ntable.stronicowanie po stronie serwera ngtable

Mam dwóch usług internetowych:

localhost:8080/app/api/period Method GET json powrót lista podmiotów. Parametry są przekazywane numerowi strony, zakresowi okresu początkowego i zakresu po zatrzymaniu.

localhost:8080/app/api/period/count Metoda GET liczba zwrotów okresów. Gdy parametry są przekazywane zakres początkowy i zakres, kiedy się zatrzyma.

this.tableParams = new ngTableParams({ 
     page: 1, 
     count: 10 
    }, { 
     counts: [10], 
     total: 0, 
     getData: function($defer, params) { 
      $http.get('/app/api/period', {params: { 
       pageNumber:params.page() - 1, 
       rangeStart:rangeStart, 
       rangeStop:rangeStop}}) 
       .success(function(data, status) { 

        params.total($http.get('/app/api/period/count', {params: { 
         rangeStart:rangeStart, 
         rangeStop:rangeStop}})); 

        $defer.resolve(data); 
       }); 
     } 
    }); 

Tabela params.total nie jest aktualizowana corectly tak wyświetlane są dane w tabeli, ale przyciski stronicowania nie są widoczne.

Czy ktoś może mi wytłumaczyć, jak używać $http.get wewnątrz słuchacza sukcesu innego $http.get w tym przypadku, aby uzyskać poprawne ustawienie params.total.

Odpowiedz

8

Nie widać przycisków paginacji, ponieważ funkcja get() prawdopodobnie zwróci wartość 10 z powodu limitu "rangeStart", "rangeStop" po stronie serwera, a jeśli zwrócisz 10 wyników na 10, nic nie będzie do stronowania .

Możesz zwrócić 10 wyników na żądanie, ale params.total należy zawsze liczyć wszystkich wyników.

Zresztą nie trzeba 2 get() zwraca kiedy można zwrócić go w jednym jak ten: D

{ 
    "results": [ 
     { 
      "id": "1437", 
      "task_started_at": "2014-06-09 12:25:25", 
      "task_finished_at": "2014-06-09 12:25:25" 
     }, 
     { 
      "id": "1436", 
      "task_started_at": "2014-06-09 12:26:31", 
      "task_finished_at": "2014-06-09 12:26:31" 
     } 
    ], 
    "total": 1027 
} 

I kod mógłby wyglądać następująco:

params.total(data.total); 
$defer.resolve(data.results); 

a także nie trzeba w sumie bo dostaniesz go od seerver więc usunąć:

total: 0; 

Finaly kod z 2 get() zwraca współpracy uld wyglądać następująco:

this.tableParams = new ngTableParams({ 
     page: 1, 
     count: 10 
    }, { 
     getData: function($defer, params) { 
      $http.get('/app/api/period', {params: { 
       pageNumber:params.page() - 1, 
       rangeStart:rangeStart, 
       rangeStop:rangeStop}}) 
       .success(function(data, status) { 

        params.total($http.get('/app/api/period/count')); 

        $defer.resolve(data); 
       }); 
     } 
    }); 

gdzie $http.get('/app/api/period/count') powraca łączna liczba rekordów jak 1234

Powodzenia

+0

Dziękuję za odpowiedź, ale liczyć serwisow prawidłową liczbę wszystkich okresów i że nie ma 10 lub mniej, które mogłyby powodować ukryte przyciski. Problem polega na tym, że obiekt obietnic jquery i sposób jego obsługi przeze mnie. Ostatnio zrobiłem to przez ręczne stronicowanie i domyślne szablonowanie w kanciastym. Twoja sugestia, zwracanie wszystkich okresów i uzyskanie długości ze zwróconej tablicy, nie jest zbyt skutecznym rozwiązaniem. Tryb leniwy jest dla mnie lepszy. – bmlynarczyk

+0

@bmlynarczyk Spójrz lepiej na odpowiedź diablo powyżej.On ** nie ** sugeruje uzyskanie wszystkich wyników z serwera i użycie właściwości length Array. Zamiast tego sugeruje zwrócenie obiektu Json z dwoma właściwościami. W rekordzie wyników będzie znajdować się tablica (strona), a suma (bez długości) będzie zawierała liczbę serwerów(). Musisz tylko zalogować się po stronie serwera, jeśli to możliwe. – cleftheris

+0

@clarethis Zgadzam się. Odpowiedź Diablo została błędnie zinterpretowana przeze mnie. – bmlynarczyk

0

wyglądać wadę url nadzieję, że to może pomóc:

var Api = $resource('/data'); 
    this.tableParams = new NgTableParams({ 
     page: 1, // show first page 
     count: 10 // count per page 
    }, { 
     filterDelay: 300, 
     getData: function(params) { 
     // ajax request to api 
     return Api.get(params.url()).$promise.then(function(data) { 
      alert("1111"); 
      params.total(90); 
      return data.results; 
     }); 
     } 
    }); 
    } 
Powiązane problemy