我打开了a similar topic a few days ago,建议在路由组件定义中使用beforeRouteLeave。
但是,我正在创建一个Vue组件,我将无法控制开发人员想要如何定义他们的路由组件。因此,我需要一种在我自己的组件中触发事件的方法,而不依赖于外部路由组件。
当从一条路由更改到另一条路由时,beforeDestroy会在DOM结构更改之后触发。
我尝试在组件定义中使用beforeUpdate和updated事件,但在DOM更改之前似乎没有任何事件触发。
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')发布于 2018-10-01 17:49:43
在Vue实例生命周期中,一旦DOM更改,钩子beforeDestroy就会被调用。
您很可能正在寻找一个beforeUnmount钩子,它介于mounted和beforeDestroy之间,但这是不可用的:

但是,您可以利用JavaScript hooks。有一个名为JavaScript的leave钩子,您可以在DOM更改之前访问它。
leave: function (el, done) {
// ...
done()
},要使其工作,您需要将元素包装在https://v2.vuejs.org/v2/guide/transitions.html#Transitioning-Single-Elements-Components包装组件中。
即。
<transition
:css="false"
@leave="leave"
>
<div>
<!-- ... -->
</div>
</transition>..。
methods: {
leave(el, done) {
// access to DOM element
done()
}
}https://stackoverflow.com/questions/52593490
复制相似问题