Vuex store getter всегда возвращает false - PullRequest
0 голосов
/ 01 февраля 2019

Я новичок в Vue JS, а также с Vuex.У меня проблемы с доступом к получателям магазина, enter image description here

Вы можете видеть в получателе, Активировано верно, И в Моем получателе в store.js есть

 getters: {
loggedIn(state) {
  return state.token !== null
},
Activated(state) {
  return state.activated;
},

Вы можете видеть, что активированное состояние также имеет значение true, но когда я получаю доступ с помощью

store.getters.Activated

, оно всегда возвращает false, но когда я получаю доступ к другому получателю, зарегистрированному тем же методом в той же функции, оно дает значение true.

store.getters.loggedIn

Где я пытался получить доступ к этому в

router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
  if (!store.getters.loggedIn) {
    next({
      name: 'home',
    })
  } else {
    next()
  }
} 
else if (to.matched.some(record => record.meta.requiresActivation)) {
  debugger;
  if (store.getters.Activated===true) {
    next()
  } else {
    next({
      name: 'activate',
    })
  }
}
else if (to.matched.some(record => record.meta.requiresVisitor)) {
  if (store.getters.loggedIn) {
    next({
      name: 'activate',
    })
  } else {
    next()
  }
} else {
  next()
}

})

мутация в магазине JS

mutations: {
updateFilter(state, filter) {
  state.filter = filter
},

retrieveToken(state, token) {
  state.token = token
},
CheckActivation(state, value) {
  state.activated = value
},
destroyToken(state) {
  state.token = null
}},

и действия

actions: {
CheckActivation(context){
  if(this.token===null){
    context.commit('CheckActivation', false)
    return false;
  }
  else{
    var settings = {
      "async": true,
      "crossDomain": true,
      "url": "http://vuejs.test/api/user",
      "method": "GET",
      "headers": {
        "Accept": "application/json",
        "Authorization": "Bearer "+ this.state.token,
        "cache-control": "no-cache"
      }
    }
    $.ajax(settings).done(function (response) {
      if(response.verified)
      context.commit('CheckActivation', true)
      else
      context.commit('CheckActivation', false)
    });
  }
},

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 01 февраля 2019

Так что это, скорее всего, потому что вы будете обращаться к переменной хранилища, прежде чем она будет установлена ​​в значение trueДля точного решения, пожалуйста, добавьте код мутации вышеупомянутой переменной и вызов метода. Возможно, вам потребуется использовать async await в действиях store и в вызове метода vue file.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...