Come posso archiviare i dati nella memoria locale usando Angularjs?


177

Attualmente sto usando un servizio per eseguire un'azione, vale a dire recuperare i dati dal server e quindi archiviarli sul server stesso.

Invece di questo, voglio mettere i dati nella memoria locale invece di archiviarli sul server. Come faccio a fare questo?

Risposte:


125

questo è un po 'del mio codice che memorizza e recupera nella memoria locale. utilizzo gli eventi di trasmissione per salvare e ripristinare i valori nel modello.

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;
}]);

9
come lo usi?
Chovy

4
Chovy, ecco l'esempio angolare completa stackoverflow.com/questions/12940974/...
Anton

290
Per la cronaca sessionStoragelocalStorage
Mars Robertson

4
potresti usare $ window.sessionStorage in modo da poterlo iniettare nei tuoi test
Guillaume Massé


105

Se si utilizza $window.localStorage.setItem(key,value)per archiviare, $window.localStorage.getItem(key)recuperare e $window.localStorage.removeItem(key)rimuovere, è possibile accedere ai valori in qualsiasi pagina.

Devi passare il $windowservizio al controller. Sebbene in JavaScript, l' windowoggetto sia disponibile a livello globale.

Usando $window.localStorage.xxXX()l'utente ha il controllo sul localStoragevalore. La dimensione dei dati dipende dal browser. Se si utilizza solo, il $localStoragevalore rimane finché si utilizza window.location.href per passare ad un'altra pagina e se si utilizza <a href="location"></a>per navigare verso un'altra pagina, il $localStoragevalore viene perso nella pagina successiva.


12
Questa soluzione mi si adattava meglio. Perché usare un plug-in o un modulo quando puoi accedere direttamente al DOM con la stessa facilità? Poiché volevo memorizzare oggetti piuttosto che semplici stringhe, ho semplicemente usato angular.toJson () in combinazione con setItem () e angular.fromJson () in combinazione con getItem (). Facile. Lo adoro.
Brett Donald,

5
Questa è la risposta migliore Non sono necessarie dipendenze esterne.
Kasper Ziemianek,

2
D'accordo, questa è la soluzione più semplice per la gestione di coppie chiave / valore
jolySoft il

Qual è la chiave nella riga: $ window.localStorage.setItem (chiave, valore). Dove viene dichiarato e impostato?

La chiave è qualunque cosa tu voglia che sia che l'ID univoco sia il valore. Quindi TU definisci la chiave quando memorizzi qualcosa ed è la stessa cosa che usi per recuperarla.
user441521


50

Utilizzare ngStorageper tutte le esigenze di archiviazione locale di AngularJS. Si noti che questa NON è una parte nativa del framework JS angolare.

ngStorage contiene due servizi $localStoragee$sessionStorage

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

Controlla la demo


24
vale la pena ricordare che non fa parte dell'angolare e deve essere importato come file aggiuntivo
Serge

1
collegamento al modulo npm?
Chovy


2

Puoi usare localStorageper lo scopo.

passi:

  1. aggiungi ngStorage.min.js nel tuo file
  2. aggiungi la dipendenza ngStorage nel tuo modulo
  3. aggiungi il modulo $ localStorage nel tuo controller
  4. usa $ localStorage.key = valore

2

Ho creato (ancora un altro) servizio di archiviazione html5 angolare. Volevo mantenere gli aggiornamenti automatici resi possibili da ngStorage, ma rendere i cicli digest più prevedibili / intuitivi (almeno per me), aggiungere eventi da gestire quando sono necessari ricariche di stato e anche aggiungere la condivisione della memoria delle sessioni tra le schede. Ho modellato l'API dopo $resourcee l'ho chiamata angular-stored-object. Può essere usato come segue:

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

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

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

L'API è qui .

Repo è qui .

Spero che aiuti qualcuno!


Ai votanti in basso piacerebbe spiegare i loro voti, per favore?
DerMike,

1
Ora uso un oggetto angolare memorizzato nel mio progetto ed è davvero facile da usare. Inoltre, Yaacov è molto veloce nel rispondere alla domanda. Quindi lo consiglio anche io!
JR Utily,

2

Seguire i passaggi per archiviare i dati in Angular - archiviazione locale:

  1. Aggiungi "ngStorage.js" nella tua cartella.
  2. Iniettare 'ngStorage' nel modulo angular

        eg: angular.module("app", [ 'ngStorage']);
  3. Aggiungi la $localStoragetua funzione app.controller

4.È possibile utilizzare $localStorageall'interno del controller

Eg: $localstorage.login= true;

Quanto sopra memorizzerà il deposito locale nell'applicazione browser


1

A seconda delle esigenze, ad esempio se si desidera consentire la scadenza dei dati o impostare limiti sul numero di record da archiviare, è possibile anche consultare https://github.com/jmdobry/angular-cache che consente di definire se la cache si trova in memoria, localStorage o sessionStorage.


1

Uno dovrebbe usare uno script di terze parti per questo chiamato chiamato ngStorage qui è un esempio su come usare. Aggiorna localstorage con cambiamenti in ambito / vista.

    <!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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.