-1

I want to get language data for i18n from database. I use session storage for save data then get data from API. But i18n created before session storage get data from database. How can I create session storage before create i18n?

i18n

store

call

1 Answers1

0

I used the mounted() hook in the main App.js file to query (javascript) session storage. Like this:

  mounted () {
    //  see if we have a user in Session Storage
    //  yes? commit it to store
    if (sessionStorage.getItem('username') && sessionStorage.getItem('userId') && sessionStorage.getItem('permission') && sessionStorage.getItem('userKey')) {
      let obj = {
        username: sessionStorage.getItem('username'),
        userId: sessionStorage.getItem('userId'),
        permission: sessionStorage.getItem('permission'),
        key: sessionStorage.getItem('userKey')
      }
      this.$store.commit('setUser', obj)
    //  no? commit default 'Guest' user
    } else {
      this.$store.commit('setUserToGuest')
    }
  }

That's not an actual SESSION store, so it has to be set in javascript as well. When I get back from a user login http request, I set the variables like this:

loginCheck () {
  api.user.login(this.username1, this.password1).then((response) => {
    if (response.data.login.pass > 0) {
      //  set session . . .
      sessionStorage.setItem('username', response.data.login.username)
      sessionStorage.setItem('userId', response.data.login.id)
      sessionStorage.setItem('permission', response.data.login.permission)
      sessionStorage.setItem('userKey', response.data.login.user_key)
      //  set the store
      let obj = {
        userId: response.data.login.id,
        username: response.data.login.username,
        permission: response.data.login.permission,
        key: response.data.login.user_key
      }
      this.$store.commit('setUser', obj)
    } else {
      //  set session . . .
      sessionStorage.setItem('username', 'Guest')
      sessionStorage.setItem('userId', 0)
      sessionStorage.setItem('permission', 0)
      sessionStorage.setItem('userKey', 0)
      this.$store.commit('setUserToGuest')
    }
  })
}
  • I have a a database language. I try get data from it then i set them in sessionStrorage. Then i call sessionStorage in vue-i18n, the firstime i access my wep app although i see in sessionStorage has database but when i console.log it return for me a null. I click refresh everthing is ok. I don't understand why it return null although i call it in beforeCreate() function. – PinPolygons Dec 05 '19 at 09:09
  • I don't know if this helps, but use chrome developers tools Application tab to get a real time look at the state of your Session Storage. – Bill Dickson Dec 05 '19 at 19:38
  • i think this problem is Asynchronous. How can i call function then use Vue-i18n? – PinPolygons Dec 06 '19 at 02:16