¿Cómo almaceno datos en el almacenamiento local usando Angularjs?


177

Actualmente estoy usando un servicio para realizar una acción, es decir, recuperar datos del servidor y luego almacenarlos en el servidor.

En lugar de esto, quiero poner los datos en el almacenamiento local en lugar de almacenarlos en el servidor. ¿Cómo hago esto?

Respuestas:


125

Este es un poco de mi código que almacena y recupera al almacenamiento local. Utilizo eventos de difusión para guardar y restaurar los valores en el modelo.

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
como usas esto
— chovy

44
chovy, aquí está el ejemplo angular completo stackoverflow.com/questions/12940974/…
— Anton

290
Para el registro sessionStorage≠localStorage
— Mars Robertson

44
podría usar $ window.sessionStorage para poder inyectarlo en sus pruebas
— Guillaume Massé


105

Si utiliza $window.localStorage.setItem(key,value)para almacenar, $window.localStorage.getItem(key)recuperar y $window.localStorage.removeItem(key)eliminar, puede acceder a los valores en cualquier página.

Tienes que pasar el $windowservicio al controlador. Aunque en JavaScript, el windowobjeto está disponible globalmente.

Al usar $window.localStorage.xxXX()el usuario tiene control sobre el localStoragevalor. El tamaño de los datos depende del navegador. Si solo usa $localStorage, el valor permanece mientras use window.location.href para navegar a otra página y si usa <a href="location"></a>para navegar a otra página, entonces su $localStoragevalor se pierde en la página siguiente.


12
Esta solución me fue mejor. ¿Por qué usar un complemento o un módulo cuando puede ir directamente al DOM? Como quería almacenar objetos en lugar de cadenas simples, simplemente usé angular.toJson () en combinación con setItem () y angular.fromJson () en combinación con getItem (). Fácil. Quiéralo.
— Brett Donald

55
Esta es la mejor respuesta. No se necesitan dependencias externas.
— Kasper Ziemianek

2
De acuerdo, esta es la solución más simple para la gestión de pares clave / valor
— jolySoft

Qué es la clave en la línea: $ window.localStorage.setItem (clave, valor). ¿Dónde se declara y establece?

La clave es lo que quiera que sea que identifique de forma única el valor. Entonces USTED define la clave cuando almacena algo y eso es lo mismo que usa para recuperarlo.
— user441521


50

Úselo ngStoragepara todas sus necesidades de almacenamiento local de AngularJS. Tenga en cuenta que esto NO es una parte nativa del marco Angular JS.

ngStorage contiene dos servicios $localStoragey$sessionStorage

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

Mira la demo


24
Vale la pena mencionar que no es parte de angular, y debe importarse como archivo adicional
— Serge

1
enlace al módulo npm?
— chovy


2

Puedes usar localStoragepara el propósito.

Pasos:

  1. agregue ngStorage.min.js en su archivo
  2. agregue dependencia ngStorage en su módulo
  3. agregue el módulo $ localStorage en su controlador
  4. use $ localStorage.key = value

2

Creé (otro) servicio de almacenamiento angular html5. Quería mantener las actualizaciones automáticas posibles ngStorage, pero hacer que los ciclos de resumen sean más predecibles / intuitivos (al menos para mí), agregar eventos para manejar cuando se requieren recargas de estado y también agregar almacenamiento de sesión compartida entre pestañas. Modelé la API después $resourcey la llamé angular-stored-object. Se puede usar de la siguiente manera:

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

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

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

API es aquí .

Repo está aquí .

Espero que ayude a alguien!


¿Les importaría a los votantes de abajo explicar sus votos, por favor?
— DerMike

1
Ahora uso el objeto almacenado angular en mi proyecto, y es realmente fácil de usar. Además, Yaacov es muy rápido en responder preguntas. ¡Así que también lo recomiendo!
— JR Utily 01 de

2

Siga los pasos para almacenar datos en Angular - almacenamiento local:

  1. Agregue 'ngStorage.js' en su carpeta.
  2. Inyecte 'ngStorage' en su angular.module

        eg: angular.module("app", [ 'ngStorage']);
  3. Agregue $localStoragesu función app.controller

4.Usted puede usar $localStoragedentro de su controlador

Eg: $localstorage.login= true;

Lo anterior almacenará el almacenamiento local en la aplicación de su navegador


1

Dependiendo de sus necesidades, por ejemplo, si desea permitir que los datos caduquen o establecer limitaciones en la cantidad de registros que se almacenarán, también puede consultar https://github.com/jmdobry/angular-cache que le permite definir si el caché se encuentra en la memoria, localStorage o sessionStorage.


1

Uno debería usar un script de terceros para esto llamado ngStorage. Aquí hay un ejemplo de cómo usarlo. Actualiza localstorage con cambios en el alcance / 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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.