初始回答
在 main.js
中(即我们“安装”所有模块并创建Vue
实例的文件,即src/main.js
):
const vm = new Vue({
el: '#app',
router,
store,
apolloProvider,
components: { App },
template: '<App/>'
})
export { vm }
这是我的例子,但在我们的情况下,最重要的是const vm
和router
在你的store
中:
import { vm } from '@/main'
yourMutation (state, someRouteName) {
vm.$router.push({name: someRouteName})
}
P.S. 通过使用import { vm } from '@/main'
,我们可以访问在Vuex
中所需的任何内容,例如bootstrap-vue
某些组件需要的vm.$root
。
P.P.S. 看起来只有当所有内容都加载完成后,我们才能使用vm
。换句话说,如果我们在mounted()
中调用someMutation
,则不能在其中使用vm
,因为mounted()
会在vm
创建之前出现/发生。
新答案:
Constantin的答案(被接受的那个)比我的好,所以我想为新手展示如何实现它。
在core目录中(在我这里是/src
中),与App.vue
、main.js
和其他文件并列,我有一个名为router.js
的文件,其内容如下:
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/pages/Home/TheHome'
const Page404 = () => import( '@/components/pages/404)
const Page503 = () => import(/* webpackChunkName: "Page503" */ '@/components/pages/503)
Vue.use(Router)
const router = new Router({
mode: 'hash',
base: process.env.BASE_URL,
linkExactActiveClass: 'active',
routes: [
{
path: '*',
name: 'Page404',
component: Page404
},
{
path: '*',
name: 'Page503',
component: Page503
},
{
path: '/',
name: 'Home',
component: Home
},
{....},
{....}
]
})
router.beforeEach(async (to, from, next) => {
next()
})
export default router
将我们的路由器导入到 main.js
中:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
const vm = new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
export { vm }
最后,在您的组件,Vuex或任何其他地方,import router from './router'
并进行您需要的任何操作,例如router.push(...)