从Vuex Store中的操作内推送路径

时间:2018-03-02 07:34:40

标签: javascript vue.js vue-router vuex

尝试从商店内推送路线更改。我尝试将router导入商店本身,然后执行以下操作:

LOG_OUT({commit}){
  commit('LOG_OUT__MUTATION');

  router.push({
   name: 'Login' 
  })
}

......但那没用。

我也不想直接使用组件推送路由更改,因为这意味着我需要检查身份验证并在每个组件中推送路由更改,这对我来说似乎很麻烦。

编辑:

LOG_OUT__MUTATION清除状态中存储的令牌。

2 个答案:

答案 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' 
      })
    })
  }

...