Reputation: 1962
I'm confused about how beforeLeaveRoute is supposed to work in VueRouter. The trigger is never being called. Here's my code:
<template>
<router-view/>
</template>
<script>
export default {
name: 'App',
};
</script>
import Vue from 'vue'
import VueRouter from 'vue-router'
import PageOne from '../views/PageOne'
import PageTwo from '../views/PageTwo'
Vue.use(VueRouter)
export default new VueRouter({
routes: [
{
path: '/pageone',
name: 'pageone',
component: PageOne,
},
{
path: '/pagetwo',
name: 'pagetwo',
component: PageTwo,
},
]
})
<template>
<router-link to="/turbines">Go to page two</router-link>
</template>
<script>
export default {
name: 'PageOne',
beforeRouteLeave (to, from, next) {
console.log("beforeLeaveRoute PageOne");
},
}
</script>
<template>
<router-link to="/towers">Go to page one</router-link>
</template>
<script>
export default {
name: 'PageTwo',
beforeRouteLeave (to, from, next) {
console.log("beforeLeaveRoute PageTwo");
}
}
</script>
The code fails silently with no errors. The links work, the page navigates from page one to page two and back when clicked, but I get no console logs from the beforeLeaveRoute trigger and cannot control the leaving of the route by calling next.
Using: vue 2.6.10 and vue-router 3.1.3
Upvotes: 2
Views: 5245
Reputation: 4067
I think you are mistaken while writing the codes
<template>
<router-link to="/towers">Go to page one</router-link>
</template>
<script>
export default {
name: 'PageTwo',
beforeRouteLeave(to, from, next) { //check here
console.log("beforeLeaveRoute PageTwo");
}
}
</script>
you could not have written beforeLeaveRoute
instead you had to write beforeRouteLeave
does that make sense?
Upvotes: 2