初始答案
在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})
}
PS使用import { vm } from '@/main'
我们可以访问我们需要的任何东西Vuex
,例如vm.$root
某些组件所需的bootstrap-vue
。
PPS似乎我们可以vm
在加载所有内容时使用。换句话说,我们不能用vm
里面someMutation
的情况下,如果我们称之为someMutation
内mounted()
,因为mounted()
自带/发生之前vm
被创建。
新答案
康斯坦丁的答案(公认的答案)比我的要好,因此只想向新手展示如何实现它。
在核心目录中(/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(...)