Como armazenar dados no armazenamento local usando o Angularjs?

177

Atualmente, estou usando um serviço para executar uma ação, ou seja, recuperar dados do servidor e, em seguida, armazenar os dados no próprio servidor.

Em vez disso, quero colocar os dados no armazenamento local em vez de armazená-los no servidor. Como eu faço isso?

mauris
fonte

Respostas:

125

este é um pouco do meu código que armazena e recupera no armazenamento local. eu uso eventos de transmissão para salvar e restaurar os valores no 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;
}]);
Anton
fonte
9
como você usa isso?
chovy
4
chovy, aqui está o exemplo angular completo stackoverflow.com/questions/12940974/…
Anton
290
Para o registro sessionStoragelocalStorage
Mars Robertson
4
você poderia usar $ window.sessionStorage assim você pode injetá-lo em seus testes
Guillaume Massé
105

Se você usar $window.localStorage.setItem(key,value)para armazenar, $window.localStorage.getItem(key)recuperar e $window.localStorage.removeItem(key)remover, poderá acessar os valores em qualquer página.

Você precisa passar o $windowserviço para o controlador. Embora em JavaScript,window objeto esteja disponível globalmente.

Ao usar $window.localStorage.xxXX()o usuário, você tem controle sobre o localStoragevalor. O tamanho dos dados depende do navegador. Se você usar apenas $localStorage, o valor permanecerá enquanto você usar window.location.href para navegar para outra página e se você usar <a href="location"></a>para navegar para outra página, seu $localStoragevalor será perdido na próxima página.

Sunil Gouda
fonte
12
Essa solução me serviu melhor. Por que usar um plug-in ou um módulo quando você pode facilmente ir direto para o DOM? Como eu queria armazenar objetos em vez de cadeias simples, usei angular.toJson () em combinação com setItem () e angular.fromJson () em combinação com getItem (). Fácil. Adoro.
Brett Donald
5
Esta é a melhor resposta. Nenhuma dependência externa necessária.
Kasper Ziemianek
2
Concordou, esta é a solução mais simples para o gerenciamento de chave / valor par
jolySoft
O que é a chave na linha: $ window.localStorage.setItem (chave, valor). Onde é declarado e definido?
A chave é o que você quer que seja esse valor exclusivamente de ID. Então, você define a chave quando armazena algo e é a mesma coisa que usa para recuperá-lo.
user441521
50

Use ngStoragepara todas as suas necessidades de armazenamento local do AngularJS. Observe que essa NÃO é uma parte nativa da estrutura JS angular.

ngStorage contém dois serviços $localStoragee$sessionStorage

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

Verifique a demonstração

Jethik
fonte
24
pena mentionning que não faz parte do angular, e deve ser importado como arquivo adicional
Serge
1
link para o módulo npm?
Chovy 9/03
2

Você pode usar localStoragepara esse fim.

Passos:

  1. adicione ngStorage.min.js ao seu arquivo
  2. adicione dependência ngStorage no seu módulo
  3. adicione o módulo $ localStorage no seu controlador
  4. use $ localStorage.key = value
Sukhminder Parmar
fonte
2

Eu criei (ainda outro) serviço de armazenamento angular html5. Eu queria manter as atualizações automáticas possíveis ngStorage, mas tornar os ciclos de digestão mais previsíveis / intuitivos (pelo menos para mim), adicionar eventos para lidar quando as recargas de estado forem necessárias e também adicionar o compartilhamento de sessões de armazenamento entre as guias. Modelei a API depois $resourcee a chamei angular-stored-object. Pode ser usado da seguinte maneira:

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

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

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

API está aqui .

Repo está aqui .

Espero que ajude alguém!

Yaacov
fonte
Os eleitores que votam para baixo gostariam de explicar seus votos, por favor?
DerMike 13/10
1
Agora, uso objetos angulares armazenados no meu projeto e é realmente fácil de usar. Além disso, Yaacov é realmente rápido em responder à pergunta. Então eu recomendo também!
JR Utily
2

Siga as etapas para armazenar dados no Angular - armazenamento local:

  1. Adicione 'ngStorage.js' na sua pasta.
  2. Injete 'ngStorage' no seu angular.module

        eg: angular.module("app", [ 'ngStorage']);
  3. Adicione $localStoragesua função app.controller

4.Você pode usar $localStoragedentro do seu controlador

Eg: $localstorage.login= true;

O acima armazenará o armazenamento local no aplicativo do navegador

Sam Ruben
fonte
1

Dependendo de suas necessidades, como se você deseja permitir que os dados expirem ou defina limitações em quantos registros armazenar, também é possível acessar https://github.com/jmdobry/angular-cache, que permite definir se o cache fica na memória, localStorage ou sessionStorage.

Aaron Morrison
fonte
1

Deve-se usar um script de terceiros para isso chamado ngStorage. Aqui está um exemplo de como usar. Ele atualiza o armazenamento local com alterações no escopo / exibição.

    <!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
fonte