2017-01-09 1 views
0

Ich versuche, alle Daten von einer benutzerdefinierten API (Kolben mit PostgresSQL-Datenbank) mit "$ http" Service in meinem Controller zu bekommen, aber die API und Datenbank ist mit Seitenumbruch, was bedeutet, dass wenn Ich möchte auf Daten zugreifen müssen, um solche Dienste zu erstellen:Umgang mit Seitenumbruch in der Datenbank mit AngularJS

/*FIRST PAGE*/  
$http.get("/api/test", testData) 
       .success(...) 
/*SECOND PAGE*/ 
$http.get("/api/test?page=2", testData) 
       .success(...) 

Dies ist offensichtlich keine gute Lösung, aber es funktioniert! Könnten Sie mir helfen, besser mit dieser Situation umzugehen? weil ich weiß, dass diese api mehr als tausend seiten enthält ...

Prost!

Antwort

0

Während dies wie eine logische Lösung scheint ...

/* SERVICE */ 
var baseUrl = "/api/test"; 

MyService.getTests = function(page, testData) { 
    var pageParams = ""; 
    if (page > 1) { 
    pageParams = "?page="+page; 
    } 
    return $http.get(baseUrl+pageParams, testData).success().error(); 
} 

... GET Anfragen erlauben Ihnen nicht alle Daten zu senden. Ich bin mir nicht sicher, wie Sie planen, testData an eine $http.get Anfrage zu senden. Der zweite Parameter einer Anfrage GET ist das Objekt config, das Ihren Service wesentlich vereinfacht.

var baseUrl = "/api/test"; 
MyService.getTests = function(page, testData) { 
    return $http.get(baseUrl, {params: {page: page}) //becomes /api/test?page=1 
    .success() 
    .error(); 
} 
+1

Tun Sie das niemals. Der "$ http" -Dienst von Angulars unterstützt 'config' param (zweiter Parameter von' .get'), der Parameter 'params' unterstützt und alle concatentaion mit der richtigen Kodierung etc. für Sie erledigt. – djxak

+0

Sie sollten dies als Antwort senden –

0

Sie können eine Variable einfach jedes Mal übergeben, wenn Sie zum nächsten Datensatz blättern möchten. So hättest du:

$http.get("/api/test?page="+ pageNum, testData).success(..) 

Hoffe, das hilft!

+0

Aber was ist, wenn ich wissen möchte, wie viele Datensätze ich in meinem gesamten Datensatz habe? Kann ich Daten von allen meinen Gets zu einem Array verbinden? Ist das eine "gute Praxis" -Lösung? –

+1

Ruft die API alle Datensätze auf? – DDelgro

0

versuchen, einen Dienst zu schaffen, die Versprechen verwendet die Daten zugreifen und die Daten, die die Art und Weise auseinander brechen Sie wollen:

 function getTestData(testData) { 

     return $http.get("/api/test", testData) 
      .then(function(response){ //Promise is successful create an object to store the data 
      }, handleError); 

     function testError(response){//Handle any errors if the promise fails 
      return response; 
     } 
    } 
1

Dies ist in der official documentation decribed.

Angular des $http Dienst unterstützt config param (zweiter param von .get), die params Parameter unterstützt und alles tun, die concatentaion mit dem richtigen Codierung etc etc für Sie.

params – {Object.<string|Object>} - Karte von Strings oder Objekte, die werden mit dem paramSerializer und den beigefügten als GET Parameter serialisiert werden.

So können Sie

angular 
    .module('xxx') 
    .factory('getPagedData', function ($http) { 
     return function(page) { 
     return $http.get("/api/test", { params: { page: page } }); 
     } 
    }); 

tun und es wie folgt verwenden:

function someController(getPagedData) { 
    getPagedData(2).then(...); // will do GET /api/test?page=2 
} 

Beachten Sie auch, die .success Methode deprecated ist. Es wird sogar in Angular 1.6 entfernt. Verwenden Sie stattdessen .then.

+0

Vielen Dank! –

Verwandte Themen