RÉPONSE INITIALE
Sur main.js
(celui où l'on "installe" tous les modules et où l'on crée Vue
instance, c'est-à-dire src/main.js
):
const vm = new Vue({
el: '#app',
router,
store,
apolloProvider,
components: { App },
template: '<App/>'
})
export { vm }
C'est mon exemple, mais dans notre cas, le plus important ici est const vm
y router
Dans votre store
:
import { vm } from '@/main'
yourMutation (state, someRouteName) {
vm.$router.push({name: someRouteName})
}
P.S. Utilisant import { vm } from '@/main'
nous pouvons accéder à tout ce dont nous avons besoin dans Vuex
par exemple vm.$root
qui est nécessaire à certains composants de bootstrap-vue
.
P.P.S. Il semble que l'on puisse utiliser vm
juste quand tout est chargé. En d'autres termes, nous ne pouvons pas utiliser vm
à l'intérieur de someMutation
dans ce cas, si nous appelons someMutation
à l'intérieur de mounted()
parce que mounted()
vient/se produit avant vm
est créé.
NOUVELLE RÉPONSE
Constantin réponse (celui qui a été accepté) est meilleur que le mien, donc je veux juste montrer aux novices comment l'implémenter.
Direction intérieure du noyau (intérieur /src
dans mon cas), à côté de App.vue
, main.js
et d'autres que j'ai router.js
avec le contenu :
import Vue from 'vue'
import Router from 'vue-router'
// Traditional loading
import Home from '@/components/pages/Home/TheHome'
// Lazy loading (lazy-loaded when the route is visited)
const Page404 = () => import(/* webpackChunkName: "Page404" */ '@/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
},
// Other routes
{....},
{....}
]
})
// Global place, if you need do anything before you enter to a new route.
router.beforeEach(async (to, from, next) => {
next()
})
export default router
Importez notre routeur vers 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 }
Enfin, à l'intérieur de votre composant, ou Vuex ou n'importe où ailleurs import router from './router'
et faire ce dont vous avez besoin, comme router.push(...)
0 votes
C'est parce que vous l'utilisez à l'intérieur d'une fonction flèche qui traite 'this' comme un littéral. convertissez-la en une fonction régulière ou utilisez les réponses suggérées ci-dessous...