Angularjs kullanarak verileri yerel depolama alanında nasıl depolarım?


177

Şu anda bir eylem gerçekleştirmek için bir hizmet kullanıyorum, yani sunucudan veri almak ve sonra sunucunun kendisi veri depolamak.

Bunun yerine, verileri sunucuda depolamak yerine yerel depoya koymak istiyorum. Bunu nasıl yaparım?

Yanıtlar:


125

Bu benim kod biraz yerel depolama depolar ve alır. Modeldeki değerleri kaydetmek ve geri yüklemek için yayın olaylarını kullanıyorum.

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
bunu nasıl kullanıyorsun
chovy

4
chovy, işte tam açısal örnek stackoverflow.com/questions/12940974/…
Anton

290
Kayıt için sessionStoragelocalStorage
Mars Robertson

4
$ window.sessionStorage'ı kullanabilirsiniz, böylece testlerinize enjekte edebilirsiniz
Guillaume Massé


105

Eğer kullanırsanız $window.localStorage.setItem(key,value)mağazaya, $window.localStorage.getItem(key)almak ve $window.localStorage.removeItem(key)kaldırmak için, o zaman herhangi bir sayfada değerleri erişebilirsiniz.

Sen geçmek zorunda $windowkontrolöre hizmeti. JavaScript'te olsa da, windownesne global olarak kullanılabilir.

Kullanarak $window.localStorage.xxXX()kullanıcı üzerinde kontrol varlocalStorage değere. Verilerin boyutu tarayıcıya bağlıdır. Yalnızca kullanırsanız $localStoragedeğer , diğer sayfaya gitmek için window.location.href komutunu kullandığınız sürece kalır ve başka bir sayfaya gitmek için kullanırsanız <a href="location"></a>, $localStoragedeğer sonraki sayfada kaybolur.


12
Bu çözüm bana çok yakıştı. Doğrudan DOM'a kolayca gidebildiğinizde neden bir eklenti veya modül kullanıyorsunuz? Basit dizeler yerine nesneleri depolamak istediğim için, setItem () ve angular.fromJson () ile birlikte getItem () ile birlikte angular.toJson () kullandım. Kolay. Sevdim.
Brett Donald

5
Bu en iyi cevap. Harici bağımlılık gerekmez.
Kasper Ziemianek

2
Kabul etti, bu anahtar / değer çifti yönetimi için en basit çözüm
jolySoft

Satırdaki anahtar nedir: $ window.localStorage.setItem (anahtar, değer). Nerede ilan edilir ve ayarlanır?

Anahtar, benzersiz bir kimlik değeri olmasını istediğiniz her şeydir. Bu nedenle, bir şeyi sakladığınızda anahtarı tanımlarsınız ve bu, onu almak için kullandığınız şeyle aynıdır.
user441521


50

kullanım ngStorageTüm AngularJS Yerel Depolama İhtiyaçlarınız İçin . Lütfen bunun Angular JS çerçevesinin yerel bir parçası DEĞİLDİR.

ngStorage iki hizmet içerir $localStorageve$sessionStorage

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

Demoyu Kontrol Edin


24
açısal bir parçası değildir ve ek dosya olarak içe aktarılması gerekir bahsetmeye değer
Serge

1
npm modülüne bağlantı?
chovy


2

localStorageAmaç için kullanabilirsiniz .

Adımlar:

  1. dosyanıza ngStorage.min.js dosyasını ekleyin
  2. modülünüze ngStorage bağımlılığı ekleyin
  3. kumandanıza $ localStorage modülünü ekleyin
  4. $ localStorage.key = değer kullan

2

Açısal html5 depolama hizmeti yazdım (yine başka). Otomatik güncellemeleri mümkün ngStoragekılmak, ancak sindirim döngülerini daha öngörülebilir / sezgisel hale getirmek (en azından benim için), durum yeniden yüklemeleri gerektiğinde işlemek için etkinlikler eklemek ve ayrıca sekmeler arasında paylaşım oturumu depolama alanı eklemek istedim. Sonra API modellenmiş $resourceve çağırdı angular-stored-object. Aşağıdaki gibi kullanılabilir:

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

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

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

API burada .

Repo burada .

Umarım birine yardım eder!


Aşağı seçmenler oylarını açıklamak ister misiniz lütfen?
DerMike

1
Projemde açısal olarak saklanan-nesneyi kullanıyorum ve kullanımı gerçekten çok kolay. Dahası, Yaacov soruyu cevaplamakta gerçekten hızlı. Bu yüzden ben de tavsiye ederim!
JR Utily

2

Verileri Açısal - yerel depolama alanında depolamak için adımları izleyin:

  1. 'NgStorage.js' klasörüne ekleyin.
  2. 'NgStorage' ı açısal.modülünüze enjekte edin

        eg: angular.module("app", [ 'ngStorage']);
  3. $localStorageApp.controller işlevinize ekleyin

4. $localStoragekontrolörünün içinde kullanabilirsiniz

Eg: $localstorage.login= true;

Yukarıdakiler, tarayıcı uygulamasını tarayıcı uygulamanızda saklayacaktır.



1

Buradaki ngStorage adı verilen bir üçüncü taraf komut dosyası kullanılmalı, bunun bir örneği.

    <!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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.