美文网首页
vue中清除定时器

vue中清除定时器

作者: 这里王工头 | 来源:发表于2019-04-20 22:09 被阅读0次

    欢迎访问我的博客https://qqqww.com/,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~

    @TOC

    1 前言

    最近看《vue.js实战》这本书,看到清除定时器在beforeDestroy钩子函数中进行,但是按照经验,我记得destroyed中也是可以的,于是自己建了一个vue-cli工程去研究清除定时器的一些方法

    2 方式一

    export default {
            data() {
                return {
                    timer: null
                }
            },
            created() {
                this.getBanner()
                console.log('created')
            },
            mounted() {
                console.log('mounted')
                this.timer = setInterval(() => {
                    console.log('1')
                }, 500);
            },
            updated() {
                console.log('updated')
            },
            beforeDestroy() {
                console.log('beforeDestroy' + '==========' + this.timer)
                // clearInterval(this.timer)
            },
            destroyed() {
                console.log('destroyed' + '=========' + this.timer)
                clearInterval(this.timer)
            }
    }
    

    在页面挂在的时候设置了一个定时器,首先看看钩子函数的场景,createdmounted在页面渲染的时候就都会执行出来,具体看控制台打印,当数据更新,执行updated,然后我做了个路由跳转,将该页面跳转到另外一个页面,此时控制台打印beforeDestroy==========54destroyed=========54,可见当页面跳转完成,这两个钩子函数都会执行,所以我在这两个地方分别尝试去清除定时器,都是可以的

    3 方式二

    去网上找到一种方法,利用$once监听

    const timer = setInterval(() =>{                    
        // 某些定时器操作                
    }, 500);            
    // 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
    this.$once('hook:beforeDestroy', () => {            
        clearInterval(timer);                                    
    })
    

    看了很多文档,都推荐方式二,但始终没搞明白为什么方式二就好

    4 缓存

    然后尝试使用keep-alive对组件进行缓存,发现并不能销毁,这是destroyed是不执行的,若要清除定时器只能在beforeDestroy

    5 参考文档

    相关文章

      网友评论

          本文标题:vue中清除定时器

          本文链接:https://www.haomeiwen.com/subject/brdrgqtx.html