我已经按照文档中的定义添加了vuex-persistedstate
。 (确认并可以正常工作)
export default new Vuex.Store({
modules: {
auth,
},
plugins: [VuexPersistedState()]
});
我已经设置了路由器导航防护,以便在登录时重定向到首页
/* Auth based route handler */
router.beforeEach((to, from, next) => {
if (to.meta.hasOwnProperty('requiresAuth')) {
if (to.meta.requiresAuth === true) {
let isAuthenticated = authStore.getters.isAuthenticated
if (isAuthenticated(authStore.state) === true) {
next()
} else {
next({name: 'login'})
}
} else {
let isAuthenticated = authStore.getters.isAuthenticated
console.log(authStore.state)
if (isAuthenticated(authStore.state) === true) {
next({name: 'home'})
} else {
next()
}
}
} else {
next()
}
})
vuex持久状态将从本地存储中恢复存储,但不能在导航卫士之前恢复存储!
我可以提供源代码的任何必要部分进行评估。请根据需要评论您的请求。也欢迎实验解决方案。这对我来说只是一个私人培训应用程序!
感谢您的帮助!
答案 0 :(得分:0)
我找到了一个有效示例。
由于路由器不是组件。
在路由器配置文件中-
import authStore from '@/stores/auth/store'
相反-
import store from '@/store'
在导航卫士中,我 已替换
let isAuthenticated = authStore.getters.isAuthenticated if(isAuthenticated(authstore.state) === true){...}
与-
let isAuthenticated = store.getters['auth/isAuthenticated'] if(isAuthenticated === true){...}
现在,有效就像魅力一样……
答案 1 :(得分:0)
我知道这对@Vaishnav可能毫无用处,但是由于我最近没有在同一个兔子洞里摔倒,所以我想我会在这里找到一个解决方法,因为这是我发现的唯一要求这个问题。
在您的store/index.js
中,您需要同时导出函数和存储对象。
更改此内容:
export default() => {
return new vuex.Store({
namespaced: true,
strict: debug,
modules: {
someMod
},
plugins: [createPersistedState(persistedStateConfig)]
});
};
至:
const storeObj = new vuex.Store({
namespaced: true,
strict: debug,
modules: {
someMod
},
plugins: [createPersistedState(persistedStateConfig)]
});
const store = () => {
return storeObj;
};
export {store, storeObj}
然后,由于您现在已经更改了导出商店的方式,因此您还需要更改其导入方式。
您已在应用程序中的任何地方导入了商店,即:在main.js
-> import store from '@/store'
中,除router.js
之外,您需要更改为import {store} from '@/store'
在您的router.js
中仅使用import {storeObj} from '@/store'
,并在路由器防护中使用它而不是store
,即:storeObj.getters['someMod/someValue']