I opened a similar topic a few days ago, where I was suggested to use beforeRouteLeave
within the route component definition.
However, I'm creating a Vue component and I won't have control over how developers wants to define their route components. Therefore, I need a way to fire an event within my own component and don't rely on external route components.
When changing from one route to another, the beforeDestroy
gets fired after the DOM structure changes.
I've tried using beforeUpdate
and updated
events on my component definition, but none seems to fire before the DOM changes.
import Vue from 'vue'
import MyComponent from '../myComponent/' // <-- Need to fire the event here
import router from './router'
Vue.use(MyComponent)
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
}).$mount('#app')
In the Vue instance lifecycle, the hook
beforeDestroy
gets called once the DOM has changed.You are most likely looking for a
beforeUnmount
hook, which would be in-betweenmounted
andbeforeDestroy
, but that is not available:However, you could take advantage of JavaScript hooks. There is a JavaScript hook called
leave
, where you can access the DOM before it changes.For this to work, you would need to wrap your element in a
<transition>
wrapper component.ie.
...