兩種清除setInterval的方式:
方案一:
data() { return { timer: null // 定時器名稱 } }, mouted() { this.timer = (() => { // 某些操作 }, 1000) }, beforeDestroy() { clearInterval(this.timer); this.timer = null; }
方案二(官方推薦):通過$once事件偵聽器器在定義完定時器之后的位置來清除定時器。
方案一有兩個潛在的問題:
- 它需要在這個組件實例中保存這個
timer,如果可以的話最好只有生命周期鈎子可以訪問到它。這並不算嚴重的問題,但是它可以被視為雜物。 - 我們的建立代碼獨立於我們的清理代碼,這使得我們比較難於程序化地清理我們建立的所有東西。
mounted() { const timer = setInterval(() =>{ // 某些定時器操作 }, 500); // 通過$once來監聽定時器,在beforeDestroy鈎子可以被清除。 this.$once('hook:beforeDestroy', () => { clearInterval(timer); }) }
