获取路由器参数到 Vuex 动作

Getting router params into Vuex actions

我想将路由器参数传递给 Vuex 操作,而不必像这样以大型形式为每个操作获取它们:

edit_sport_type({ rootState, state, commit }, event) {
  const sportName = rootState.route.params.sportName <-------
  const payload = {sportName, event}                 <-------
  commit(types.EDIT_SPORT_TYPE, payload)
},

或者像这样,

edit_sport_type({ state, commit, getters }, event) {
  const payload = {sportName, getters.getSportName}  <-------
  commit(types.EDIT_SPORT_TYPE, payload)
},

或者更糟糕的是:从组件 props 中获取参数并将它们传递给 dispatch,对于每个 dispatch。

有没有办法将其抽象为大量操作?

或者突变本身的替代方法?

据我所知(我已经为我正在从事的项目调查了这个)不,没有。 最简单的方法是抽象路由获取或任何您想对服务执行的操作,然后在您的 vuex 文件中使用它,或者如果您使用模块化方法,则将其导入您的 actions.js 文件。

所以 paramFetching.js 文件将如下所示:

export default {
  fetchRouteParams: function() {
    // do fetching
    // you should return a promise 
  }
}

然后将其导入您的 vuex

import service from 'paramFetching.js'

然后做出这样的动作

...
fetchParamsAction: function({commit}) {
  service.fetchRouteParams()
    .then( (response) => { // stuff gottten from service. you should o your commit here } )
    .catch( (error) => { // error handling } )
}

然后只要发送这个动作,所有的事情都会在一个动作中处理。所以它有点将它与其余代码隔离开来。 这只是一个大概的想法。如果不够清楚,我很抱歉。如果我能提供进一步的帮助,请询问。

不确定是否理解你的问题,但是:
这个插件让你的路由器状态和你的商店保持同步:
https://github.com/vuejs/vuex-router-sync

这听起来像您要找的东西。

要从 vuex 存储操作中获取参数,导入您的 vue-router 实例,然后通过 router.currentRoute 从您的 vuex 存储访问路由器实例的参数对象。

下面的示例实现:

路由器位于 src/router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'

Vue.use(VueRouter)

const router = new VueRouter({
  mode: 'history',
  routes
})

export default router

在 vuex 商店导入路由器:

import router from '@/router'

然后在 vuex 动作函数中访问参数,在本例中 "id",如下所示:

router.currentRoute.params.id