2016-03-29 11 views
5

Ich habe eine Seite, die HTTP-Anfragen an den gleichen Ort, nur mit verschiedenen Parametern je nachdem, was der Benutzer will. So sieht mein Code so etwas wie dieses:Angular2 einfachste Möglichkeit, HTTP-Antworten zu cachen

this.http.post(//I am open to POST methods or GET methods as I have security in the back to prevent malicious writes. 
    'http://192.168.1.45:3000/mylocation', 
    'p1=' + param1 + '&p2=' + param2, 
    {headers: headers} 
) 

In JQuery Sie zum Beispiel in den Rahmen eines Cache-Attribut bauen, die automatisch zwischenspeichert und ist sehr einfach zu implementieren:

$.ajax({ 
    cache: true, 
    //other options... 
}); 

Does Angular2 haben etwas ähnliches dazu? Ich möchte diese dynamischen Antworten zwischenspeichern, solange sich der Benutzer in der Anwendung befindet. Wenn also ein Benutzer dieselbe URL mit den gleichen Parametern anfordert, würde er sie einfach aus dem Cache holen, und wenn die Parameter noch nie verwendet würden, würde dies den Netzwerkaufruf veranlassen.

Ich kann nichts in der Angular2 docs in den Anforderungsoptionen finden:

https://angular.io/docs/js/latest/api/http/RequestOptions-class.html

Antwort

10

Cache die Daten, und wenn im Cache gespeicherten Daten verfügbar Rückkehr ist dies, da sonst die HTTP-Anforderung machen. Wenn Sie sie für verschiedene Anforderungen (Parameter) wiederverwenden möchten, können Sie stattdessen die Referenzen in einem Array speichern.

getData() { 
    if(this.data) { 
     // if `data` is available just return it as `Observable` 
     return Observable.of(this.data); 
    else if(this.observable) { 
     // if `this.observable` is set then the request is in progress 
     // return the `Observable` for the ongoing request 
     return this.observable; 
    } else { 
     // create the request, store the `Observable` for subsequent subscribers 
     this.observable = this.http.get('/someUrl') 
      .map(res => res.json()) 
      .do(val => { 
      this.data = val; 
      // when the cached data is available we don't need the `Observable` reference anymore 
      this.observable = null; 
      }) 
      // make it shared so more than one subscriber can get the result 
      .share(); 
     return this.observable; 
    } 
} 
+0

Danke für die Antwort. Ich habe ein wenig Schwierigkeiten zu verstehen, da ich sehr neu beobachtbar bin, also bin ich sicher, dass ich hier etwas vermisse. Mache ich this.data und array, wenn ich mehr speichern muss? Und wenn ja, wie würde es dann durch das Array gehen und sehen, ob die Parameter die gleichen sind wie Daten nur die Antwort (Daten) und nicht die Parameter speichern würde? Vielen Dank. – user2924127

+0

Sie müssten die Daten mit dem Parameter speichern, um den Cache für einen Parameter zu erhalten, wenn die Methode erneut mit demselben Parameter aufgerufen wird. –

+0

Danke. Ich werde das prüfen, um zu sehen, ob ich es umsetzen kann. – user2924127

Verwandte Themen