Bagaimana cara menyimpan data di penyimpanan lokal menggunakan Angularjs?

177

Saat ini saya menggunakan layanan untuk melakukan tindakan, yaitu mengambil data dari server dan kemudian menyimpan data di server itu sendiri.

Alih-alih ini, saya ingin memasukkan data ke penyimpanan lokal alih-alih menyimpannya di server. Bagaimana saya melakukan ini?

mauris
sumber

Jawaban:

125

ini sedikit kode saya yang menyimpan dan mengambil ke penyimpanan lokal. saya menggunakan acara siaran untuk menyimpan dan mengembalikan nilai-nilai dalam model.

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
sumber
9
bagaimana Anda menggunakan ini
chovy
4
chovy, berikut adalah contoh lengkap stackoverflow.com/questions/12940974/…
Anton
290
Sebagai catatan sessionStoragelocalStorage
Mars Robertson
4
Anda dapat menggunakan $ window.sessionStorage sehingga Anda dapat menyuntikkannya dalam pengujian Anda
Guillaume Massé
105

Jika Anda menggunakan $window.localStorage.setItem(key,value)untuk menyimpan, $window.localStorage.getItem(key)untuk mengambil dan $window.localStorage.removeItem(key)menghapus, maka Anda dapat mengakses nilai di halaman mana pun.

Anda harus melewati $windowlayanan ke controller. Meskipun dalam JavaScript, windowobjek tersedia secara global.

Dengan menggunakan $window.localStorage.xxXX()pengguna memiliki kendali atas localStoragenilai. Ukuran data tergantung pada browser. Jika Anda hanya menggunakan $localStoragemaka nilainya tetap selama Anda menggunakan window.location.href untuk menavigasi ke halaman lain dan jika Anda menggunakan <a href="location"></a>untuk menavigasi ke halaman lain maka $localStoragenilai Anda hilang di halaman berikutnya.

Sunil Gouda
sumber
12
Solusi ini paling cocok untuk saya. Mengapa menggunakan plug-in atau modul ketika Anda bisa langsung pergi ke DOM? Karena saya ingin menyimpan objek daripada string sederhana, saya hanya menggunakan angular.toJson () dalam kombinasi dengan setItem () dan angular.fromJson () dalam kombinasi dengan getItem (). Mudah. Suka.
Brett Donald
5
Ini jawaban terbaik. Tidak diperlukan dependensi eksternal.
Kasper Ziemianek
2
Setuju, ini adalah solusi paling sederhana untuk manajemen pasangan kunci / nilai
jolySoft
Apa yang menjadi kunci di baris: $ window.localStorage.setItem (kunci, nilai). Di mana itu dinyatakan dan diatur?
Kuncinya adalah apa pun yang Anda inginkan, ID unik itulah nilainya. Jadi ANDA menentukan kunci ketika Anda menyimpan sesuatu dan itu adalah hal yang sama yang Anda gunakan untuk mengambilnya.
user441521
50

Gunakan ngStorageUntuk Semua Kebutuhan Penyimpanan Lokal AngularJS Anda. Harap dicatat bahwa ini BUKAN bagian asli kerangka JS Angular.

ngStorage berisi dua layanan, $localStoragedan$sessionStorage

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

Periksa Demo

Jethik
sumber
24
layak disebutkan bahwa itu bukan bagian dari sudut, dan harus diimpor sebagai file tambahan
Serge
1
tautan ke modul npm?
chovy
2

Anda dapat menggunakannya localStorageuntuk tujuan tersebut.

Langkah:

  1. tambahkan ngStorage.min.js di file Anda
  2. tambahkan dependensi ngStorage di modul Anda
  3. tambahkan modul $ localStorage di controller Anda
  4. gunakan $ localStorage.key = nilai
Sukhminder Parmar
sumber
2

Saya menulis (lagi) layanan penyimpanan HTML5 sudut. Saya ingin menjaga agar pembaruan otomatis dimungkinkan ngStorage, tetapi membuat siklus intisari lebih mudah diprediksi / intuitif (setidaknya untuk saya), tambahkan acara untuk ditangani saat memuat ulang keadaan diperlukan, dan juga menambahkan penyimpanan sesi berbagi antar tab. Saya memodelkan API setelahnya $resourcedan menyebutnya angular-stored-object. Dapat digunakan sebagai berikut:

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

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

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

API ada di sini .

Repo ada di sini .

Semoga ini bisa membantu seseorang!

Yaacov
sumber
Apakah pemilih yang turun mau menjelaskan suara mereka?
DerMike
1
Saya menggunakan objek bersudut-tersimpan dalam proyek saya sekarang, dan sangat mudah digunakan. Terlebih lagi, Yaacov sangat cepat dalam menjawab pertanyaan. Jadi saya merekomendasikannya juga!
JR Utily
2

Ikuti langkah-langkah untuk menyimpan data dalam Angular - penyimpanan lokal:

  1. Tambahkan 'ngStorage.js' di folder Anda.
  2. Suntikkan 'ngStorage' di angular.module Anda

        eg: angular.module("app", [ 'ngStorage']);
  3. Tambahkan $localStoragefungsi app.controller Anda

4. Anda dapat menggunakan $localStoragedi dalam controller Anda

Eg: $localstorage.login= true;

Di atas akan menyimpan penyimpanan lokal di aplikasi browser Anda

sam ruben
sumber
1

Bergantung pada kebutuhan Anda, seperti jika Anda ingin agar data pada akhirnya kedaluwarsa atau menetapkan batasan pada berapa banyak catatan untuk disimpan, Anda juga dapat melihat https://github.com/jmdobry/angular-cache yang memungkinkan Anda menentukan apakah cache berada di memori, localStorage, atau sessionStorage.

Aaron Morrison
sumber
1

Orang harus menggunakan skrip pihak ketiga untuk ini yang disebut ngStorage di sini adalah contoh cara menggunakannya. Ini memperbarui penyimpanan lokal dengan perubahan ruang lingkup / tampilan.

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