Ng-table: Beispiel mit serverseitigem Sortieren, Filtern, Gruppieren und Paginieren...

Erstellt am 13. März 2014  ·  20Kommentare  ·  Quelle: esvit/ng-table

Mir ist das Beispiel "AJAX Data Loading" auf der Website bekannt, aber es scheint, dass alle anderen Beispiele zum Sortieren, Filtern, Gruppieren und Paginieren von Daten auf der Clientseite (Browser) auftreten.

Gibt es ein Beispiel dafür, dies auf der Serverseite durchzuführen?
Ich denke, was mich wirklich interessiert, ist ein Beispiel zum Formatieren, Serialisieren und Senden von Parametern (Sortieren, Filtern, Seite, Größe) an eine Ressource (oder Restangular oder ...) ...

Danke!

Hilfreichster Kommentar

Falls dies für den Anfang hilfreich ist, hier ein Beispiel für die serverseitige Paginierung. Der Client sendet die Seitennummer und Seitengröße an den Server, und der Server gibt die Datenzeilen nur für diese Seite und die Gesamtzahl der Zeilen als Antwortheader zurück.

    $scope.tableParams = new ngTableParams({
      page: 1, count: 10
    }, {
      getData: function($defer, params) {
        var receiveData = function(data, responseHeaders) {
          // in my case, the server returns the total number of rows as a response header
          // call params.total(...) to tell ng-table the total number of rows
          params.total(responseHeaders("count"));

          // the server returns just the data for the current page, so can send it as is
          $defer.resolve(data);
        };

        // getData gets called when you click on a different page in the pagination links.
        // get the page number and size from params.$params
        var pageNumber = params.$params.page;
        var pageSize = params.$params.count;

        // set up the query parameters as expected by your server
        var queryParams = {"paging.pageSize":pageSize, "paging.pageNumber":pageNumber};

        // send an ajax request to your server. in my case MyResource is a $resource.
        MyResource.query(queryParams, receiveData);
      }
    });

Hoffe das ist für jemanden hilfreich.
Foxdonut

Alle 20 Kommentare

+1

+1

Hallo, ng-table dies ist nur eine Clientbibliothek, Serverteil können Sie nach Belieben erstellen. Zum Beispiel können Sie diesen Teil des Codes https://github.com/esvit/bazalt-rest/blob/master/src/Bazalt/Rest/Collection.php#L37 -87 . anschauen

@esvit - Die Anfrage war für ein vollständiges Beispiel für die serverseitige Paginierung, Sortierung, Gruppierung, Filterung usw. von ng-table. Ich stimme zu, dass ng-table eine Client-Bibliothek ist, aber ein solches Beispiel würde wirklich viel helfen der Szenarien beinhalten die Verwendung dieser Clientbibliothek mit Remotedaten...

@esvit ja alles was wir möchten ist etwas, das zeigt, wie man es tun _sollte_, dh welches JSON-Objekt ng-table erwartet?

+1
Auch wenn uns nur eine Möglichkeit helfen würde, die Klickereignisse des Filterns, Sortierens und Pagings abzufangen, den Rest an den Server anzuschließen... danke

tolle Bibliothek übrigens ...

+1

+1

+1

+1, wenn es eine nette Möglichkeit gibt, eine benutzerdefinierte Funktion zum Sortieren aufzurufen, die jedoch nicht benötigt wird.

Geben Sie entweder ein ng-click="sort(vars,directionToggle)" in die Kopfzeile ein und Sie können die Sortierung sogar aktiviert lassen. Die Pfeile werden dann richtig angezeigt, solange Ihr Richtungsumschalter mit dem Umschalten übereinstimmt.
Die Filterung ist etwas komplizierter, ich würde sagen, die ng-Tabellen-Filterung zu deaktivieren und dem Header eine vollständig benutzerdefinierte Filtereingabe hinzuzufügen, dann müssen Sie sich keine Gedanken über die ng-Tabellen-Intergeneration machen.

Von da an geht es darum, mit Ihren Backend-Daten umzugehen und sicherzustellen, dass Ihnen die richtigen Daten in der richtigen Reihenfolge gesendet werden. Dann stecken Sie einfach diese Daten ein und bam, Sie haben eine Ajax-Sortier-/Filtertabelle.

+1

Falls dies für den Anfang hilfreich ist, hier ein Beispiel für die serverseitige Paginierung. Der Client sendet die Seitennummer und Seitengröße an den Server, und der Server gibt die Datenzeilen nur für diese Seite und die Gesamtzahl der Zeilen als Antwortheader zurück.

    $scope.tableParams = new ngTableParams({
      page: 1, count: 10
    }, {
      getData: function($defer, params) {
        var receiveData = function(data, responseHeaders) {
          // in my case, the server returns the total number of rows as a response header
          // call params.total(...) to tell ng-table the total number of rows
          params.total(responseHeaders("count"));

          // the server returns just the data for the current page, so can send it as is
          $defer.resolve(data);
        };

        // getData gets called when you click on a different page in the pagination links.
        // get the page number and size from params.$params
        var pageNumber = params.$params.page;
        var pageSize = params.$params.count;

        // set up the query parameters as expected by your server
        var queryParams = {"paging.pageSize":pageSize, "paging.pageNumber":pageNumber};

        // send an ajax request to your server. in my case MyResource is a $resource.
        MyResource.query(queryParams, receiveData);
      }
    });

Hoffe das ist für jemanden hilfreich.
Foxdonut

+1

+1

+1

wirklich gut

Ich weiß, es ist ein bisschen spät, aber jemand hat ein wirklich gutes Beispiel für die Anzeige serverseitig sortierter Daten gemacht:
https://www.codeproject.com/Articles/892301/Server-side-Data-Filtering-Sorting-and-Paging-with

Ich wusste nicht, dass wir das schaffen. Dies ist in der Dokumentation nicht so klar. :(

Hallo Foxdonut,
Dein Kommentar hilft wirklich voll weiter, aber da ich neu bin sind mir einige Dinge nicht klar
1# Warum ReceiveData als Argument an eine Funktion übergeben wird.
Wenn ich meine Ajax-Funktion aufrufe, anstatt
MyResource.query(queryParams, receiveData);
Es zeigt Daten an, aber da Ajax später zurückkehrt, wird die Zählung nicht aktualisiert. Und wenn ich reload im Ajax-Code verwende, geht es in eine Endlosschleife:(

Hallo @rbhargava25

Warum ReceiveData als Argument an eine Funktion übergeben wird.

Weil MyResource.query eine asynchrone Funktion ist. Es stellt eine Anfrage an den Server, und wenn die Antwort zurückkommt, müssen wir wissen, welcher Code ausgeführt werden soll. In diesem Fall muss die _Callback-Funktion_ aufgerufen werden, die receiveData .

Hoffentlich hilft das.

Super danke Foxdonut...
Ich werde eine einfache http-Anfrage anstelle von Ressource verwenden. Ich hoffe, dass es funktioniert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

alienriquebm picture alienriquebm  ·  6Kommentare

Nagendra1402 picture Nagendra1402  ·  3Kommentare

esvit picture esvit  ·  37Kommentare

penchiang picture penchiang  ·  5Kommentare

raul1991 picture raul1991  ·  6Kommentare