VUE中setTimeout和setInterval自动销毁案例

 更新时间:2020年09月07日 15:03:13   作者:weixin_33852020  
这篇文章主要介绍了VUE中setTimeout和setInterval自动销毁案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在Vue的大型单页应用中,在某个路由下,经常会出现需要延迟执行(setTimeout)或者间隔之心(setInterval)的函数,但是每次在页面destroy之前,都必须手动清理掉。

正常代码如下:

beforeDestroy() {
  this._timer && clearTimeout(this._timer);
}

但是如果一不小心,就会忘记,会造成意想不到的情况,那么有什么办法能避免这种情况吗?

当然有,那就是重新写一个setTimeout的方法(或者干脆劫持window.setTimeout)。

var _pageTimer = []; 
Vue.prototype.setTimeout = (fn, time) => {
  let handler = window.setTimeout(fn, time);
  _pageTimer.push(handler);
  
  return handler;
}

在路由层面,当每次页面变更时,执行清理工作:

router.beforeEach((to, from, next) => { _pageTimer.map(handler => { window.clearTimeout(handler); }) })

再页面使用时,调用Vue的setTimeout,这样是不是方便多了呢? setInterval也是一样的。

该方法还适用于对于页面异步请求的ajax处理,可以通过获取ajax的handler,在切面切换时,调用handler.abort() 取消请求,避免对服务器资源的不必要的压力。

补充知识:在vue中使用 setTimeout ,退出页面后,计时器没有销毁

问题:页面在使用 setTimeout 定时循环某方法,或者在两个页面之间跳转时间小于定时器的时间间隔时,定时器还在运行。

原因:当我们刷新页面时,会将当前页面之前创建的 setTimeout 以及其他定时器都清除掉,但是仅仅是路由切换是不会清除的。

data (){
 return{
 clearTime: ''
 }
},
mounted () {
 randomGet () {
 // 在 1分钟到 2分钟之间 不定时执行
   var r = Math.random() * (2 - 1) + 1
   var t = Math.ceil(r * 60000)
   // console.log(t)
   this.clearTime = setTimeout(() => {
    this.submit()
    this.randomGet()
   }, t)
  },
  submit () {
   console.log('aaaa')
  }
},
destroyed () {
 clearTimeout(this.clearTime) // 清除
}

以上这篇VUE中setTimeout和setInterval自动销毁案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3+vantUI3时间组件封装过程支持选择年以及年月日时分秒

    Vue3+vantUI3时间组件封装过程支持选择年以及年月日时分秒

    这篇文章主要介绍了Vue3+vantUI3时间组件封装过程支持选择年以及年月日时分秒,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • vue 虚拟DOM快速入门

    vue 虚拟DOM快速入门

    这篇文章主要介绍了vue 虚拟DOM的相关资料,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-04-04
  • VUE3中的函数的声明和使用

    VUE3中的函数的声明和使用

    这篇文章主要介绍了VUE3中的函数的声明和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • el-table 选择框根据条件设置某项不可选中的操作代码

    el-table 选择框根据条件设置某项不可选中的操作代码

    这篇文章主要介绍了el-table 选择框根据条件设置某项不可选中的操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • vue使用canvas画布实现平面图点位标注功能(最新推荐)

    vue使用canvas画布实现平面图点位标注功能(最新推荐)

    这篇文章主要介绍了vue使用canvas画布实现平面图点位标注功能,经过本文一番研究发现canvas标签可以完成很多功能,电子签名,点位标注,问题标注,画图功能,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • Vue 自定义指令功能完整实例

    Vue 自定义指令功能完整实例

    这篇文章主要介绍了Vue 自定义指令功能,结合完整实例形式分析了vue.js自定义指令相关实现与使用操作技巧,需要的朋友可以参考下
    2019-09-09
  • Vue中使用matomo进行访问流量统计的实现

    Vue中使用matomo进行访问流量统计的实现

    这篇文章主要介绍了Vue中使用matomo进行访问流量统计的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 在vue中根据光标的显示与消失实现下拉列表

    在vue中根据光标的显示与消失实现下拉列表

    这篇文章主要介绍了在vue中根据光标的显示与消失实现下拉列表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Vue路由组件的缓存keep-alive和include属性的具体使用

    Vue路由组件的缓存keep-alive和include属性的具体使用

    :浏览器页面在进行切换时,原有的路由组件会被销毁,通过缓存可以保存被切换的路由组件,本文主要介绍了Vue路由组件的缓存keep-alive和include属性的具体使用,感兴趣的可以了解一下
    2023-11-11
  • 使用vuex的state状态对象的5种方式

    使用vuex的state状态对象的5种方式

    本文给大家介绍了使用vuex的state状态对象的5种方式,给大家贴出了我的vuex的结构,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-04-04

最新评论