Продолжайте получать [Object Object] в гибридном приложении Javascript - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю гибридное приложение с использованием Nuxt JS, Cordova и Cordova Native Storage (по сути, localalstorage).

Я сохраняю объект в собственном хранилище и извлекаю его при загрузке страницы в пределах mounted()однако, я продолжаю получать следующую ошибку, независимо от того, что я пытаюсь получить доступ к данным объекта:

[Object Object]

Мой JS в компоненте, который загружается на каждой странице:

import { mapState } from 'vuex';

export default {
  mounted () {
    document.addEventListener("deviceready", this.getNativeStorage(), false)
  },
  methods: {

    getNativeStorage() {
      window.NativeStorage.getItem("beacon_native_storage", (value) => {
        var parseObj = JSON.parse(value)
        alert(parseObj)
        alert(parseObj.localStorage)
      }, (error) => {
        alert(`Error: ${error.code}-${error.exception}`)
      });
    },

    refreshNativeStorage(currentState) {
      window.NativeStorage.initWithSuiteName("beacon");
      window.NativeStorage.setItem("beacon_native_storage", JSON.stringify(currentState), () => {
        alert('Stored currentState')
      }, (error) => {
        alert(`Error: ${error.code}`)
      });
    }

  },
  computed: {
    state () {
      return this.$store.state
    }
  },
  watch: {
    state: {
      handler: function (val, Oldval) {
        setTimeout(function () {
          this.refreshNativeStorage(this.state)
        }.bind(this), 10)
      },
      deep: true
    }
  }
}

И объект из Vuex выглядит следующим образом:

export const state = () => ({
  pageTitle: 'App name',
  dataUrls: [],
  intervalData: [],
  settings: [],
  experimentalFeatures: [],
  customAlertSeen: false,
  user: null,
  account: null,
  payloadOutput: null
})

Каждый раз, когда запускается getItem, alert(parseObj) всегда возвращает [Object Object] rather than for instance, the data. And if I try returning parseObj.localStorage.pageTitle which is clearly defined in store / localStorage.js it returns undefined`

Где я тут ошибаюсь?

1 Ответ

4 голосов
/ 24 сентября 2019

Итак, что происходит, так это то, что localStorage хранит STRINGS, а не объекты.

Когда вы сохраняете свой элемент в localStorage, сначала преобразуйте его в строку, а затем извлекайте из строки при извлечении.

localStorage.setItem('a', {b:'c',d:'e'})

localStorage.getItem('a')  // "[object Object]" <- note the quotes!

localStorage.setItem('a', JSON.stringify({b:'c',d:'e'}))

JSON.parse(localStorage.getItem('a')) // {b: "c", d: "e"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...