2016-04-28 1 views
0

$http La requête avec cache:false ignore le cache et récupère les données d'un service backend.

D'autre part,

$http demande avec cache:true utilisera le cache existant actuellement si elle est disponible, ou si aucune donnée est dans le cache, il obtiendra de nouvelles données et en cache.

Y at-il un drapeau/params je peux passer dans $http.get(...) que (ou les deux;)):

1) efface le cache existant actuellement et continue à faire la demande de http $ ... et met cette requête en cache

2) Ignore le cache actuel, effectue une demande $http.get(...) et remplace les données actuellement mises en cache par les nouvelles données.

btw, je sais que je peux utiliser $cacheFactory pour y parvenir facilement, mais je ne veux pas vraiment.

est ici simple plunkr qui explique ceci: http://plnkr.co/edit/wu8iz9?p=preview

Répondre

0

Utiliser des services pour le faire.

DataService.js

var promise; 

this.emptyCache = function() { 
    promise = null; 
}; 

this.getData = function (isFreshCallNeeded) { 
    if (isFreshCallNeeded) { this.emptyCache(); } 

    if (promise) { return promise; } 

    promise = $http({url: '', method: 'GET'}).then(function (data) { return data; }); 
    return promise; 
}; 

Dans contrôleur, injectent le service et l'utiliser comme suit:

// for first time, makes call and return promise 
DataService.getData().then(function(data) {console.log(data)}); 
// second time, makes no call and return promise cached earlier 
DataService.getData().then(function(data) {console.log(data)}); 

var isFreshCallNeeded = true; 
// clears the cache, makes a call and return new promise 
DataService.getData(isFreshCallNeeded).then(function(data) {console.log(data)}); 

// makes no call and return old saved promise 
DataService.getData().then(function(data) {console.log(data)}); 
+0

merci. J'ai pensé à utiliser un service, mais je cherche vraiment à utiliser les paramètres de cache de $ http pour faire l'affaire ... – raneshu