我觉得你那两个想法是可以的,不过如果很多组件使用的话会比较麻烦点,我建议你整一个mixin封装一下。
类似这样:
const VueTimer = {
beforeCreate() {
this.$timerMap = {}
this.$setTimeout = (handler, timeout) => {
if (!this._isDestroyed) {
this.$timerMap[setTimeout(handler, timeout)] = timeout
}
}
},
beforeDestroy() {
Object.keys(this.$timerMap).forEach((timer) => {
clearTimeout(timer)
})
}
}
然后全局注册下
Vue.mixin(VueTimer)
组件里使用
created() {
this.$setTimeout(() => {
console.log('timer')
}, 1000)
}
这样就不需要每次判断了,VueTimer将会在组件销毁时自动清空定时器
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…