2016-03-29 13 views
5

Ho una pagina che effettua richieste HTTP nella stessa posizione, solo con parametri diversi a seconda di ciò che l'utente desidera. Quindi il mio codice simile a questa:Angular2 modo più semplice per memorizzare le risposte HTTP

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 per esempio avete a costruire nel quadro di un attributo di cache che memorizza automaticamente ed è molto facile da implementare:

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

fa Angular2 hanno qualcosa di simile a questa? Vorrei memorizzare nella cache queste risposte dinamiche fintanto che l'utente si trova nell'applicazione. Quindi, se un utente richiede lo stesso url con gli stessi parametri, lo prenderebbe semplicemente dalla cache e, se i parametri non fossero mai stati utilizzati, farebbe la chiamata di rete.

io non ho trovato nulla nella documentazione Angular2 nelle opzioni di richiesta:

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

risposta

10

cache i dati, e se i dati memorizzati nella cache è disponibile ritorno questo, altrimenti fare la richiesta HTTP. Se si desidera riutilizzare per richieste diverse (parametri), è possibile regolare per memorizzare i riferimenti in una matrice.

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

Grazie per la risposta. Sto avendo un po 'di problemi a capire perché sono molto nuovo rispetto all'osservabile, quindi sono sicuro che mi manca qualcosa qui. Devo rendere this.data e array se devo archiviare di più? E se sì, allora come sarebbe passare attraverso la matrice e vedere se i parametri sono gli stessi di come i dati memorizzerebbero solo la risposta (dati) e non i parametri? Grazie. – user2924127

+0

È necessario memorizzare i dati con il parametro per ottenere la cache per un parametro quando il metodo viene chiamato di nuovo con lo stesso parametro –

+0

Grazie. Approfondirò questo per vedere se riesco ad attuarlo. – user2924127