vue組件裏定時器銷毀問題
阿新 • • 發佈:2019-02-06
com open tro ide 定時器 return 更強 監聽 操作
解決方案1:
data() { return { timer: null // 定時器名稱 } },
this.timer = (() => { // 某些操作 }, 1000)
最後在beforeDestroy()生命周期內清除定時器:
beforeDestroy() { clearInterval(this.timer); this.timer = null; }
方案1有兩點不好的地方:
- 它需要在這個組件實例中保存這個
timer
- 我們的建立代碼獨立於我們的清理代碼,這使得我們比較難於程序化的清理我們建立的所有東西
解決方案2:
該方法是通過$once這個事件偵聽器器在定義完定時器之後的位置來清除定時器。以下是完整代碼:
const timer = setInterval(() =>{ // 某些定時器操作 }, 500); // 通過$once來監聽定時器,在beforeDestroy鉤子可以被清除。 this.$once(‘hook:beforeDestroy‘, () => { clearInterval(timer); })
綜合來說,我們更推薦使用方案2,使得代碼可讀性更強,一目了然。如果不清楚$once、$on、$off
的使用,這裏送上官網的地址教程,在程序化的事件偵聽器那裏。
vue組件裏定時器銷毀問題