Хранить JSON в локальном хранилище не работает

1

После нажатия кнопки я хотел бы сохранить элемент (вложенный JSON) в новый массив и сохранить его в localstorage.

addFavourite(card) {
    console.log(JSON.stringify(card));
    var cards = [];
    this.cardfavouriteArray.push.apply(cards, card)
    this.storage.set('favouriteData', this.cardfavouriteArray);
    }


getData() {
    var data = this.storage.get('favouriteData');
    if(data){
      this.storage.get('favouriteData').then((val) => {
        console.log('test', JSON.stringify(val));
      });
    }

Я не получаю ошибки, но "test" всегда пуст. Мне нужно это как массив.

  • 0
    Какой сервис хранения вы используете? Это заказной или сторонний? Все предоставленные ответы решат проблему, но эта логика действительно должна быть удалена внутри сервиса.
Теги:
angular

3 ответа

3
Лучший ответ

Метод Set и Get для localstorage зависит от того, какую службу вы используете

1. HTML5 localStorage - если вы используете локальную локальную структуру HTML5 напрямую, вы должны использовать localStorage.getItem и localStorage.setItem

2.localstorage ограничивается хранением только строк с ключом/значением. Используйте JSON.stringify и JSON.parse при использовании настроек и получения из localstorage

addFavourite(card) {
    console.log(JSON.stringify(card));
    var cards = [];
    this.cardfavouriteArray.push.apply(cards, card)
    this.storage.setItem('favouriteData', JSON.stringify(this.cardfavouriteArray));
    }


getData() {
    var data = this.storage.get('favouriteData');
    if(data){
      this.storage.getItem('favouriteData').then((val) => {
        console.log('test', JSON.parse(val));
      });
    }

3. ng2-webstorage. В случае ng2-webstorage this.storage.retrieve и this.storage.store будет работать.

0

Измените this.storage.set('favouriteData', this.cardfavouriteArray); на localStorage.set('favouriteData', JSON.stringify(this.cardfavouriteArray)); (Это предопределенный метод угловым). Также стройте массив.

0

Установите массив в локальном хранилище следующим образом:

localStorage.setItem('favouriteData', JSON.stringify(this.cardfavouriteArray));

Получите массив из локального хранилища следующим образом:

var data = JSON.parse(localStorage.getItem('favouriteData'));

Объяснение: Это потому, что localstorage не может хранить объект, он хранится в строчном формате. Поэтому нам нужно JSON.строить объект. Также localStorage имеет имя функции setItem и getItem, как определено здесь: http://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage. Когда мы получаем строку из localstorage, нам нужно JSON.parse преобразовать ее обратно в объект.

Вы используете this.storage.set и this.storage.get. Неясно, какую библиотеку вы используете, но код, который я упомянул, будет работать в Angular или любой системе. Поскольку localStorage.setItem и localStorage.getItem - это чистый javascript.

  • 0
    дать объяснение .... почему на вопрос
  • 0
    @NullPointer, это потому что localstorage не может хранить объект, он хранится в строковом формате. Поэтому нам нужно JSON.stringify объекта. Также localStorage имеет имя функции setItem и getItem, как определено здесь: developer.mozilla.org/en-US/docs/Web/API/Window/localStorage . Когда мы получаем строку из localstorage, нам нужно JSON.parse, чтобы преобразовать ее обратно в объект.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню