最近有个大文件上传需求,如果在上传过程中离开当前页面需要弹窗提醒。
由于使用了el-tabs,切换tab路由也会改变,所以,想通过路由守卫阻止路由跳转,结果使用beforeRouteLeave 离开页面不执行。
但是danshbeforeRouteEnter进入页面会执行,离开页面destroyed也会在执行。
查看了官方文档发现造成这个问题的原因可能有多种,以下是其中几个常见的:
- 路由配置不正确:如果在路由配置中没有正确地指定路由组件,那么页面销毁时就无法触发对应的钩子函数。
- 异步操作未完成:如果有异步操作并且没有正确地取消或者等待这些操作,在离开页面时就无法执行清理操作。
- 组件被缓存:如果某个组件被缓存了,那么在离开页面时也无法触发销毁钩子函数。
组件被缓存最符合,排查发现组件确实在切换时被缓存了,使用el-tab自带的回调函数before-leave,el-tab 问题解决。