Vuex商店getter总是返回false

时间:2019-02-01 11:02:49

标签: vue.js vuex

我是Vue js和Vuex的新手。我在使用商店吸气剂时遇到麻烦, enter image description here

您可以在getter中看到,Activated为true,而在store.js的My getter中为

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

您可以看到激活状态也是如此, 但是当我访问时

store.getters.Activated

它总是返回false,但是当我访问在同一函数中以相同方法登录的另一个getter时,其值为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 :(得分:0)

因此最有可能是因为您将在将store变量设置为true之前对其进行访问。 为获得准确的解决方案,请添加上述变量的变异代码和方法调用。可能在存储操作和vue文件的方法调用中需要使用异步等待。