J'ai une simple ressource User $ qui utilise l'implémentation par défaut du cache $ http comme ceci:
factory('User', function($resource){
return $resource(endpoint + '/user/current/:projectId', {},
{get:
{
cache: true,
method: 'GET'
}
}
);
})
Cela fonctionne très bien, c'est-à-dire que mon serveur n'est appelé qu'une seule fois dans mon application, puis la valeur est extraite du cache.
Mais j'ai besoin de rafraîchir la valeur du serveur après une certaine opération. Y a-t-il un moyen simple de le faire?
Merci.
angularjs
angularjs-resource
Alexandre Bulté
la source
la source
cache
-{boolean|Cache}
- Si vrai, un cache $ http par défaut sera utilisé pour mettre en cache la requête GET, sinon si une instance de cache construite avecRéponses:
Gardez le booléen et récupérez le
$http
cache:Ensuite, vous pouvez le contrôler comme n'importe quel autre cache créé avec
$cacheFactory
, une instance d'utilisation fournie ci-dessous:la source
$resource
usine?Au lieu d'utiliser un argument booléen dans la
cache
propriété de chacun,action
vous pouvez transmettre une instance de cache créée avec $ cacheFactory sur laquelle vous pouvez avoir plus de contrôle (c'est-à-dire effacer le cache).Exemple d'utilisation:
la source
Je suis tombé sur ce fil à la recherche de quelque chose de similaire, mais j'ai trouvé que $ resource gérera automatiquement le cache pour vous, il n'est donc pas nécessaire de forcer l'effacement du cache.
L'idée est que si vous avez une ressource que vous pouvez interroger, cette réponse de requête sera mise en cache, mais si vous enregistrez quelque chose pour cette même ressource, les données précédemment mises en cache doivent être invalides, elles sont donc effacées pour vous. Il est logique que cela fonctionne de cette façon.
Voici un peu de code que j'utilise pour faire cela (vous pouvez ignorer la partie de création d'usine peut-être étrange et faire attention au corps "classe").
Si vous appelez la fonction listPlayers plusieurs fois, le premier appel effectue une requête http get et tous les appels suivants sont mis en cache. Si vous appelez addPlayer cependant, une publication http est effectuée comme prévu, puis le prochain appel à listPlayers effectuera un get http (non mis en cache).
Cela vous empêche de gérer le cache de quelqu'un d'autre ($ http) et d'essayer de savoir quelles URL sont utilisées pour les requêtes et lesquelles effacent les caches au bon moment.
Je suppose que la morale de l'histoire ici est de travailler avec la bibliothèque et tout ira bien ... sauf pour les bogues ou les fonctionnalités incomplètes, mais Angular n'en a aucun;)
ps Tout cela fonctionne sur AngularJS 1.2.0.
la source