尝试从商店内推送路线更改。我尝试将router
导入商店本身,然后执行以下操作:
LOG_OUT({commit}){
commit('LOG_OUT__MUTATION');
router.push({
name: 'Login'
})
}
......但那没用。
我也不想直接使用组件推送路由更改,因为这意味着我需要检查身份验证并在每个组件中推送路由更改,这对我来说似乎很麻烦。
编辑:
LOG_OUT__MUTATION
清除状态中存储的令牌。
答案 0 :(得分:3)
我终于想通了。
最终实施
在store
中,只需导入router
:
import router from '@/router/index'
actions: {
LOG_OUT({commit}){
commit('LOG_OUT__MUTATION');
router.push({
name:'Login'
})
}
}
然后从我的应用的另一部分,我只是导入了store
并发送了一个动作:
import Store from '@/store/store'
myFunction () {
Store.dispatch('LOG_OUT');
}
初步实施
这是我实施Daksh Miglani的解决方案(有效)。在我的store.js中,我有:
export const forceLogout = (commit) => {
return new Promise((resolve, reject) => {
commit('LOG_OUT__MUTATION');
resolve();
})
}
export default new Vuex.Store({
actions,
mutation
})
然后在应用程序的另一部分(helpers.js),我有:
import Store from '@/store/store'
import { forceLogout } from '@/store/store'
import router from '@/router/index'
forceLogout(Store.commit)
.then(() => {
debugger;
router.push({
name:'Login'
})
}).catch((error) => {
console.log(error)
})
答案 1 :(得分:0)
好的,我为你找到了一个解决方案:
首先,你写一个像这样的商店提交函数:
export const commitLogout = ({commit}) => {
return new Promise((resolve, reject) => {
commit('LOG_OUT__MUTATION');
// once you're done with your clearing, resolve or reject the promise
resolve();
});
}
此函数将返回一个promise,您可以在注销功能中使用该功能,最后允许您先提交并清除然后注销。
然后使用此功能作为退出功能:
...
logout() {
commitLogout().then(() => {
this.$router.push({
name: 'Login'
})
})
}
...