Як зберігати дані у локальному сховищі за допомогою Angularjs?


177

В даний час я використовую сервіс для виконання дії, а саме - отримання даних із сервера, а потім зберігання даних на самому сервері.

Замість цього я хочу помістити дані в локальну пам’ять, а не зберігати їх на сервері. Як це зробити?

Відповіді:


125

це трохи мого коду, який зберігає та повертає до локального сховища. Я використовую трансляційні події для збереження та відновлення значень у моделі.

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
як ти цим користуєшся?
chovy

4
чови, ось повний кутовий приклад stackoverflow.com/questions/12940974/…
Антон

290
На запис sessionStoragelocalStorage
Марс Робертсон

4
ви можете використовувати $ window.sessionStorage, щоб ви могли ввести його у свої тести
Guillaume Massé


105

Якщо ви використовуєте $window.localStorage.setItem(key,value)для зберігання, $window.localStorage.getItem(key)пошуку та $window.localStorage.removeItem(key)видалення, ви можете отримати доступ до значень на будь-якій сторінці.

Ви повинні передати $windowпослугу контролеру. Хоча в JavaScript windowоб'єкт доступний у всьому світі.

За допомогою $window.localStorage.xxXX()користувач має контроль над localStorageзначенням. Розмір даних залежить від браузера. Якщо ви використовуєте лише $localStorageтоді, значення залишається до тих пір, поки ви використовуєте window.location.href для переходу до іншої сторінки, а якщо ви <a href="location"></a>переходите до іншої сторінки, то ваше $localStorageзначення втрачається на наступній сторінці.


12
Таке рішення мені найбільше підходило. Навіщо використовувати плагін або модуль, коли ви можете так само легко перейти до DOM? Оскільки я хотів зберігати об'єкти, а не прості рядки, я просто використав angular.toJson () у поєднанні з setItem () та angular.fromJson () у поєднанні з getItem (). Легко. Любіть це.
Бретт Дональд

5
Це найкраща відповідь. Жодні зовнішні залежності не потрібні.
Каспер Зімеянек

2
Погоджено, це найпростіше рішення для керування парами ключ / цінність
jolySoft

Що є ключовим у рядку: $ window.localStorage.setItem (ключ, значення). Де це оголошено і встановлено?

Ключовим є все, що ви хочете, щоб це було унікально ідентифікаційне значення. Таким чином, Ви визначаєте ключ, коли щось зберігаєте, і це те саме, що ви використовуєте для його отримання.
користувач441521

56

Для локального зберігання існує модуль для перегляду нижче URL-адреси:

https://github.com/grevory/angular-local-storage

та інше посилання для локального зберігання HTML5 та angularJs

http://www.amitavroy.com/justread/content/articles/html5-local-storage-with-angular-js/


5
Відповіді, що мають лише посилання, відмовляються від StackOverflow, оскільки зовнішні посилання зазвичай гинуть.
Hubert Grzeskowiak

50

Використовуйте ngStorageдля всіх ваших потреб локального зберігання AngularJS. Зверніть увагу, що це НЕ є рідною частиною рамок Angular JS.

ngStorage містить дві послуги $localStorageта$sessionStorage

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

Перевірте демонстрацію


24
Варто згадати, що він не є частиною кутового, і його слід імпортувати як додатковий файл
Сергій

1
посилання на npm-модуль?
chovy


2

Ви можете використовувати localStorageдля цілей.

Кроки:

  1. додати ngStorage.min.js у свій файл
  2. додайте залежність ngStorage у свій модуль
  3. додати модуль $ localStorage у свій контролер
  4. використовувати $ localStorage.key = значення

2

Я є автором (ще однієї) послуги кутового зберігання html5. Я хотів, щоб автоматичні оновлення стали можливими ngStorage, але зробити цикли дайвінгу більш передбачуваними / інтуїтивними (принаймні для мене), додати події для обробки, коли потрібно перезавантажити стан, а також додати сховище сеансу спільного використання між вкладками. Я моделював API після $resourceі викликав його angular-stored-object. Його можна використовувати наступним чином:

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

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

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

API тут .

Репо тут .

Сподіваюся, це комусь допоможе!


Чи хотіли б проголосити виборців, щоб пояснити свої голоси?
DerMike

1
Зараз я використовую об'єкт із збереженням у куті у своєму проекті, і це дуже просто у використанні. Більше того, Яаков дуже швидко відповідає на питання. Тож я теж рекомендую!
JR Utily

2

Виконайте кроки для зберігання даних у кутовому - локальному сховищі:

  1. Додайте "ngStorage.js" у свою папку.
  2. Введіть 'ngStorage' у свій angular.module

        eg: angular.module("app", [ 'ngStorage']);
  3. Додайте $localStorageу свою функцію app.controller

4.Ви можете використовувати $localStorageвсередині свого контролера

Eg: $localstorage.login= true;

Вищезгадане збереже локальне зберігання у вашій програмі браузера


1

Залежно від ваших потреб, наприклад, якщо ви хочете дозволити закінчуванню терміну дії даних або встановити обмеження на кількість записів для зберігання, ви також можете переглянути https://github.com/jmdobry/angular-cache, який дозволяє визначити, чи кеш сидить у пам'яті, localStorage або sessionStorage.


1

Слід застосувати сторонній скрипт для цього під назвою ngStorage, ось приклад використання. Він оновлює локальне зберігання зі зміною сфери / перегляду.

    <!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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.