vue离开页面时如何销毁定时器

 更新时间:2022年05月30日 09:45:55   作者:夏代有工的玉  
这篇文章主要介绍了vue离开页面时如何销毁定时器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue离开页面销毁定时器

beforeDestroy() {
if(this.timer) {
    clearInterval(this.timer); //关闭
   }  //利用vue的生命周期函数

vue 是单页面应用,路由切换后,定时器并不会自动关闭,需要手动清除,当页面被销毁时,清除定时器即可。

组件里定时器销毁问题

我在a页面写一个定时,让他每秒钟打印一个1,然后跳转到b页面,此时可以看到,定时器依然在执行。这样是非常消耗性能的。

如下图所示:

解决方法1

首先我在data函数里面进行定义定时器名称:

 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);                                     
})

类似于其他需要在当前页面使用,离开需要销毁的组件(例如一些第三方库的picker组件等等),都可以使用此方式来解决离开后以后在背后运行的问题。

综合来说,我们更推荐使用方案2,使得代码可读性更强,一目了然。如果不清楚$once、$on、$off的使用,这里送上官网的地址教程,在程序化的事件侦听器那里。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • vue proxy 的优势与使用场景实现

    vue proxy 的优势与使用场景实现

    这篇文章主要介绍了vue proxy 的优势与使用场景实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 详解vue 中 scoped 样式作用域的规则

    详解vue 中 scoped 样式作用域的规则

    这篇文章主要介绍了vue 中 scoped 样式作用域的规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 使用VUE+iView+.Net Core上传图片的方法示例

    使用VUE+iView+.Net Core上传图片的方法示例

    这篇文章主要介绍了使用VUE+iView+.Net Core上传图片的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Vue中子组件的显示与隐藏方式

    Vue中子组件的显示与隐藏方式

    这篇文章主要介绍了Vue中子组件的显示与隐藏方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Vue3跨域解决方案实例详解

    Vue3跨域解决方案实例详解

    这篇文章主要介绍了Vue3跨域解决方案详解,需要的朋友可以参考下
    2023-01-01
  • 详解uniapp如何解决H5页面双标题

    详解uniapp如何解决H5页面双标题

    Uniapp打包到线上,会出现双标题问题,原因是:通过地址链接访问时,会有个浏览器自身的标题,和uniapp自身的导航栏标题重复,本文给大家介绍了uniapp如何解决H5页面双标题,需要的朋友可以参考下
    2024-10-10
  • vue 权限认证token的实现方法

    vue 权限认证token的实现方法

    这篇文章主要介绍了vue 权限认证token的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Vue内置组件Teleport的使用

    Vue内置组件Teleport的使用

    Teleport是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去,本文就来介绍一下如何使用,感兴趣的可以了解一下
    2023-05-05
  • axios全局请求参数设置,请求及返回拦截器的方法

    axios全局请求参数设置,请求及返回拦截器的方法

    下面小编就为大家分享一篇axios全局请求参数设置,请求及返回拦截器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vue项目中如何安装element组件

    Vue项目中如何安装element组件

    这篇文章主要介绍了Vue项目中如何安装element组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论