除了在 beforeDestroy
生命周期钩子函数中清除定时器,还可以通过路由拦截和 $once
一次性侦听事件来实现。
示例如下:
- 在组件内设置定时器,并存储由
setInterval()
返回的ID
值:// 组件中保存定时器 this.testSetinterval = setInterval(() => { setTimeout(() => { console.log('test clearInterval') }, 0) }, 2000)
- 拦截前端路由,在组件内的
beforeDestroy
钩子函数中清除定时器:router.beforeEach((to, from, next) => { clearInterval(this.testSetinterval) })
- 通过
$once
一次性侦听一个事件,在组件内的beforeDestroy
钩子函数中清除定时器:mounted () { const that = this // 组件中保存定时器 this.testSetinterval = setInterval(() => { setTimeout(() => { console.log('test clearInterval') }, 0) }, 2000) // 监听 beforeDestroy 事件 this.$once('hook:beforeDestroy', () => { clearInterval(that.testSetinterval) }) }
上述三种方法都可以在组件销毁时清除定时器,你可以根据自己的需求选择适合的方法。