ПОЧАТКОВА ВІДПОВІДЬ
У 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
як створено.
НОВА ВІДПОВІДЬ
Constantin в відповідь (Прийнята один) краще , ніж у мене, так що просто хочу , щоб показати новачкові , як реалізувати його.
Всередині ядра реж (всередині /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(...)