如何从nuxt路由器模块的router.js文件访问Vuex存储?

时间:2020-10-08 14:35:19

标签: javascript nuxt.js vue-router

  • 我正在使用nuxt-community/router-module
  • 它要求您创建一个router.js文件,您可以在其中添加全局路由配置
  • 如何从该文件访问商店?

1 个答案:

答案 0 :(得分:2)

您可以通过Rox上下文在Vue组件之外的window.$nuxt中提供的根上下文访问商店:

// router.js
import Router from 'vue-router'

export function createRouter(ssrContext, createDefaultRouter, routerOptions) {
  const options = routerOptions ? routerOptions : createDefaultRouter(ssrContext).options

  const router = new Router({
    ...options
  })

  if (process.client) {
    router.beforeEach((to, from, next) => {
      // Since `beforeEach` is invoked before `window.$nuxt` is
      // initialized, use `setTimeout` without a timeout to wait
      // until the next macro tick.
      setTimeout(() => {
        window.$nuxt.$store.dispatch('myAction')
      })

      next()
    })
  }

  return router
}

如果使用@nuxtjs/router模块的唯一原因是添加一个beforeEach路由器挂钩,则实际上可以使用Nuxt plugin来实现:

// plugins/router.js
export default ({ app, store }) => {
  app.router.beforeEach((to, from, next) => {
    store.dispatch('myAction')
    next()
  })
}

// nuxt.config.js
export default {
  plugins: [
    '~plugins/router.js'
  ]
}