首先来看一下我们平时最常见的清除方式
export default {
data() {
return {
timer: null,
}
},
mounted() {
this.timer = setInterval(() => {}, 1000)
},
beforeDestroy() {
clearInterval(this.timer)
this.timer = null
},
}
该方案有两点不好的地方,引用尤大的话来说就是:
更好的方案
该方法是通过$once
这个事件侦听器器在定义完定时器之后的位置来清除定时器。以下是完整代码:
const timer = setInterval(() => {
// 某些定时器操作
}, 500)
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {
clearInterval(timer)
})
hook:<生命周期>
的使用方式参见源码 (opens new window)