Vue 项目一个页面有两个兄弟组件,分别是组件A和组件B
组件A的 mounted
中有一个 setInterval
定时器,从组件A切换到组件B,组件A中的 setInterval
还在运行,再次切换到组件A时,此时,定时器中的请求翻倍了...
解决方案 1:
setInterval
生成的 ID 号通过 sessionStorage
保存,组件B切换到A时,在 mounted
里面 setInterval
代码执行之前进行 sessionStorage
变量判断,如果存在数据,获取 setInterval
ID 值,执行 window.clearInterval(ID)
这里只会处理定时器翻倍问题,不能彻底解决请求问题,切换 vue router 后,页面还有会定时器请求...
解决方案 2:
使用 Vue Router 的 beforeRouteLeave
,表示导航离开该组件的对应路由时调用此函数。实现如下
... mounted () { ... }, beforeRouteLeave (to, from, next) { if (sessionStorage.getItem('getResoucesIntervalId')) { window.clearInterval(parseInt(sessionStorage.getItem('getResoucesIntervalId'))) } next() }, methods: {} ...
官方地址: router.vuejs.org/guide/advan…