Comment stocker des données dans le stockage local à l'aide d'Angularjs?

177

Actuellement, j'utilise un service pour effectuer une action, à savoir récupérer des données sur le serveur, puis stocker les données sur le serveur lui-même.

Au lieu de cela, je souhaite placer les données dans le stockage local au lieu de les stocker sur le serveur. Comment puis-je faire cela?

Mauris
la source

Réponses:

125

c'est un peu de mon code qui stocke et récupère dans le stockage local. J'utilise des événements de diffusion pour enregistrer et restaurer les valeurs du modèle.

app.factory('userService', ['$rootScope', function ($rootScope) {

    var service = {

        model: {
            name: '',
            email: ''
        },

        SaveState: function () {
            sessionStorage.userService = angular.toJson(service.model);
        },

        RestoreState: function () {
            service.model = angular.fromJson(sessionStorage.userService);
        }
    }

    $rootScope.$on("savestate", service.SaveState);
    $rootScope.$on("restorestate", service.RestoreState);

    return service;
}]);
Anton
la source
9
comment l'utilisez vous?
chovy
4
chovy, voici l'exemple angulaire complet stackoverflow.com/questions/12940974/…
Anton
290
Pour mémoire sessionStoragelocalStorage
Mars Robertson
4
vous pourriez utiliser $ window.sessionStorage pour l'injecter dans vos tests
Guillaume Massé
105

Si vous utilisez $window.localStorage.setItem(key,value)pour stocker, $window.localStorage.getItem(key)récupérer et $window.localStorage.removeItem(key)supprimer, vous pouvez accéder aux valeurs de n'importe quelle page.

Vous devez transmettre le $windowservice au contrôleur. Bien qu'en JavaScript, l' windowobjet est disponible dans le monde entier.

En utilisant, $window.localStorage.xxXX()l'utilisateur a le contrôle sur la localStoragevaleur. La taille des données dépend du navigateur. Si vous n'utilisez que, la $localStoragevaleur reste tant que vous utilisez window.location.href pour naviguer vers une autre page et si vous utilisez <a href="location"></a>pour naviguer vers une autre page, votre $localStoragevaleur est perdue dans la page suivante.

Sunil Gouda
la source
12
Cette solution me convenait le mieux. Pourquoi utiliser un plug-in ou un module alors que vous pouvez tout aussi facilement accéder directement au DOM? Parce que je voulais stocker des objets plutôt que de simples chaînes, j'ai juste utilisé angular.toJson () en combinaison avec setItem () et angular.fromJson () en combinaison avec getItem (). Facile. Aimer.
Brett Donald
5
C'est la meilleure réponse. Aucune dépendance externe nécessaire.
Kasper Ziemianek
2
D'accord, c'est la solution la plus simple pour la gestion des paires clé / valeur
jolySoft
Quelle est la clé dans la ligne: $ window.localStorage.setItem (clé, valeur). Où est-il déclaré et défini?
La clé est ce que vous voulez que ce soit cette valeur unique. Vous définissez donc la clé lorsque vous stockez quelque chose et c'est la même chose que vous utilisez pour le récupérer.
user441521
50

Utilisez ngStoragepour tous vos besoins de stockage local AngularJS. Veuillez noter qu'il ne s'agit PAS d'une partie native du framework Angular JS.

ngStorage contient deux services, $localStorageet$sessionStorage

angular.module('app', [
   'ngStorage'
]).controller('Ctrl', function(
    $scope,
    $localStorage,
    $sessionStorage
){});

Consultez la démo

Jethik
la source
24
il vaut la peine de mentionner qui ne fait pas partie d'angular, et devrait être importé en tant que fichier supplémentaire
Serge
1
lien vers le module npm?
chovy
2

Vous pouvez utiliser localStorageà cette fin.

Pas:

  1. ajoutez ngStorage.min.js dans votre fichier
  2. ajouter la dépendance ngStorage dans votre module
  3. ajoutez le module $ localStorage dans votre contrôleur
  4. utilisez $ localStorage.key = valeur
Sukhminder Parmar
la source
2

J'ai créé (encore un autre) service de stockage angulaire html5. Je voulais garder les mises à jour automatiques rendues possibles par ngStorage, mais rendre les cycles de résumé plus prévisibles / intuitifs (du moins pour moi), ajouter des événements à gérer lorsque des recharges d'état sont nécessaires, et également ajouter un stockage de session de partage entre les onglets. J'ai modélisé l'API après $resourceet je l'ai appelée angular-stored-object. Il peut être utilisé comme suit:

  angular
    .module('auth', ['yaacovCR.storedObject']);

  angular
    .module('auth')
    .factory('session', session);

  function session(ycr$StoredObject) {
    return new ycr$StoredObject('session');
  }

L'API est .

Repo est .

J'espère que cela aide quelqu'un!

Yaacov
la source
Les électeurs de bas voudraient-ils expliquer leurs votes, s'il vous plaît?
DerMike
1
J'utilise maintenant angular-stored-object dans mon projet, et c'est vraiment facile à utiliser. De plus, Yaacov est très rapide pour répondre aux questions. Je le recommande donc aussi!
JR Utily
2

Suivez les étapes pour stocker les données dans Angular - stockage local:

  1. Ajoutez «ngStorage.js» dans votre dossier.
  2. Injectez 'ngStorage' dans votre angular.module

        eg: angular.module("app", [ 'ngStorage']);
  3. Ajouter $localStoragedans votre fonction app.controller

4.Vous pouvez utiliser à l' $localStorageintérieur de votre contrôleur

Eg: $localstorage.login= true;

Ce qui précède stockera le stockage local dans votre application de navigateur

Sam Ruben
la source
1

En fonction de vos besoins, par exemple si vous souhaitez permettre aux données d'expirer éventuellement ou définir des limites sur le nombre d'enregistrements à stocker, vous pouvez également consulter https://github.com/jmdobry/angular-cache qui vous permet de définir si le cache se trouve dans la mémoire, localStorage ou sessionStorage.

Aaron Morrison
la source
1

On devrait utiliser un script tiers pour cela appelé ngStorage, voici un exemple d'utilisation.Il met à jour localstorage avec un changement de portée / vue.

    <!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <!-- CDN Link -->
    <!--https://cdnjs.cloudflare.com/ajax/libs/ngStorage/0.3.6/ngStorage.min.js-->
    <script src="angular.min.js"></script>
    <script src="ngStorage.min.js"></script>
    <script>
        var app = angular.module('app', ['ngStorage']);
        app.factory("myfactory", function() {
            return {
                data: ["ram", "shyam"]
            };
        })
        app.controller('Ctrl', function($scope, $localStorage, $sessionStorage, myfactory) {

            $scope.abcd = $localStorage; //Pass $localStorage (or $sessionStorage) by reference to a hook under $scope
            // Delete from Local Storage
            //delete $scope.abcd.counter;
            // delete $localStorage.counter;
            // $localStorage.$reset(); // clear the localstorage
            /* $localStorage.$reset({
                 counter: 42   // reset with default value
             });*/
            // $scope.abcd.mydata=myfactory.data;
        });
    </script>
</head>

<body ng-app="app" ng-controller="Ctrl">

    <button ng-click="abcd.counter = abcd.counter + 1">{{abcd.counter}}</button>
</body>

</html>
Aniket Jha
la source