60 votes

Stockage local et $cacheFactory d'AngularJS

J'ai un problème de stockage de beaucoup de données côté client, et je n'arrive pas à décider quelle est la meilleure solution. J'utilise actuellement le cacheFactory d'AngularJS, qui fonctionne bien, mais toutes les données sont rechargées avec une nouvelle session. Est-il utile d'utiliser le stockage local à la place ?

0 votes

Bonjour, vous pouvez utiliser le webstorage puis vous pouvez récupérer les données avec une usine, w3schools.com/html/html5_webstorage.asp

0 votes

Oui le localstorage permet de stocker des données sans se soucier de la session. Je vous recommande également de regarder parse.com pour sauvegarder les données dans le nuage au lieu d'un serveur.

1 votes

J'ai fini par choisir github.com/gsklee/ngStorage La voie angulaire : pas de conneries de Getter 'n' Setter !

84voto

Blackhole Points 5601

Si votre objectif est de stocker des données côté client et persistantes, vous ne pouvez pas utiliser la balise $cacheFactory qui ne met en cache que les données de la session en cours.

Une solution consiste à utiliser la nouvelle API de stockage local. Ce module Angular génial fait tout le sale boulot pour vous, et revient même aux cookies pour les anciens navigateurs !

1 votes

Non, vous devez sérialiser vos objets avant de les stocker (et les désérialiser pour les lire), typiquement en JSON. Mais stocker des objets directement n'a pas beaucoup de sens, puisque tout stockage persistant doit obligatoirement utiliser des fichiers, et donc des données linéarisées.

2 votes

Votez pour la mention du module de stockage local. Cela m'a épargné beaucoup de codage !

21 votes

@Rasalom Je suis en retard pour la fête, mais j'ai regardé les sources du module localstorage et il stocke les objets sans que vous ayez besoin de les encoder/décoder vous-même (il le fait pour vous). Cette fonctionnalité a peut-être été développée après cet article, mais je voulais la partager pour les futurs lecteurs.

21voto

frank blizzard Points 3973

Une solution alternative est http://jmdobry.github.io/angular-cache/ qui fonctionne bien avec ngResource et peut aussi être facilement configuré pour se synchroniser avec localStorage, de sorte que les demandes ne doivent pas être refaites après un rafraîchissement de la page.

$resource('my/kewl/url/:key', { key: '@key' }, {
  'get': { method: 'GET', 
           cache: $angularCacheFactory('MyKewlResourceCache', { 
                                          storageMode: 'localStorage' })
         }
});

0 votes

J'ai l'impression que celle-ci est plus puissante que la solution de la réponse acceptée. Merci pour le $resource, je ne le vois pas sur son site officiel.

1voto

StarFuck Points 11

$cacheFactory ne semble clairement PAS être votre solution, car en tant que Trou noir dit, le cache sera effacé à chaque fois que la session expire. $cacheFactory est juste une implémentation de memcache à la manière d'Angular.

angular-cache est juste une API d'aide, fondamentalement elle ajoute une option à $cacheFactory et l'une de ces options est de stocker le cache dans un stockage persistant (comme localStorage).

Ainsi, si vous voulez stocker des données dans un stockage persistant, vous pouvez utiliser l'un des modules disponibles, tels que angular-local-storage ou utiliser $cookieStore mais cela va créer des cookies...

0 votes

Encore une fois, $cacheFactory ne met pas en cache les données pour la session en cours, il met en cache les données en mémoire, donc seulement tant que votre application angulaire est vivante. Un rafraîchissement de page, par exemple, le tue. @user3305685 pouvez-vous mettre à jour cette information pour éviter d'induire les gens en erreur ?

0voto

hugsbrugs Points 313

Un autre module angulaire qui fait le travail : https://github.com/jmdobry/angular-cache

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X