我是Vue js和Vuex的新手。我在使用商店吸气剂时遇到麻烦,
您可以在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)
});
}
},
请帮助。
答案 0 :(得分:0)
因此最有可能是因为您将在将store变量设置为true之前对其进行访问。 为获得准确的解决方案,请添加上述变量的变异代码和方法调用。可能在存储操作和vue文件的方法调用中需要使用异步等待。