VUE简单的定时器实时刷新的实现方法


Posted in Javascript onJanuary 20, 2019

说明:我只是一个刚入门的小前端,你们可以指导我,但千万不要喷我,虽然我知道我很垃圾!人吗,都是要成长的!大佬,请多多指教!!!

我前段时间刚刚写了一个类似余股票的项目,上边的K线图是要实时去刷新的,所以要用vue做一个心跳,当然大家也可以选择用websocket,大佬们感觉肯定很简单,但是我只是一个刚入门的小前端,特此记录一下。

思路

其实思路很简单,首先要了解vue的生命周期和vue的内置函数,其思路就是先定义一个定时器,然后去定时请求后台,到最后关闭这个定时器,哈哈,是不是都是废话,但是确实如此,你们可以先去尝试一下。

这个小功能实现的自我总结

一开始我感觉很简单,不就是个心跳吗,在methods 中定义一个timer函数返回一个setInterval和一个getData函数,在timer中调用getData, 然后在created中去调用,其中就会有一个问题,就是刚进来页面不会有数据,为什么想必大家肯定会知道,就是这是调用了一个定时器只有时间到了以后才会去请求后台,这个不是很好解决吗,在created 中在调用一次getData不就好了吗,嗯,我就这样做了,虽然我感觉不是很合理,啊啊啊啊,好烦,第一次写不知道如何写,还是用代码来表达,这样比较清楚........

第一版,这样很不合理,因为这样会加载页面发送两次数据,而且还有一个很大的雷,就是setInterval在网页卸载是不会关掉,而且你再次进入这个页面时,定时器会加速,这个BUG应该是因为vue切换页面不会刷新的原因吧,请大佬指教。

<script>
  export default {
    created() {
      this.timer()
      this.getData()
    }
    methods: {
      // 这是一个获取数据
      getData() {
        .....
      }
      // 这是一个定时器
      timer() {
        return setInterval(()=>{
          this.getData()
        },5000)
      }
    },
    destroyed() {
  clearInterval(this.timer)
    }
  }
</script>

第二版,我进行了改进,我把setInterval换成了setTimeout,因为setTimeout只执行一次,所以要靠函数去驱动它,然后我用到了updated,它也有一个弊端,就是有某一个数据更新,它就会触发,所以有时会执行多次。

<script>
  export default {
    created() {
      this.getData()
    }
    methods: {
      // 这是获取数据的函数
      getData() {
        .....
      }
      // 这是一个定时器
      timer() {
        return setTimeout(()=>{
          this.getData()
        },5000)
      }
    },
    updated() {
     this.timer() 
    }
    destroyed() {
  clearTimeout(this.timer)
    }
  }
</script>

最终版

监听list只要它变化就去触发定时器,这样就解决了updated的多次触发。

<script>
  export default {
    data() {
      return {
        list: []  // 获取的数据列表
      }
    }
    created() {
      this.getData()
    }
    methods: {
      // 这是获取数据的函数
      getData() {
        .....
      }
      // 这是一个定时器
      timer() {
        return setTimeout(()=>{
          this.getData()
        },5000)
      }
    },
    watch: {
      list() {
      this.timer() 
      }
    }
    destroyed() {
  clearTimeout(this.timer)
    }
  }
</script>

总结

主要就是要了解vue的钩子函数。可能漏洞很多,希望大佬多多指教,还有就是第一次写,有点词穷,请大家多多担待。、

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用EXT实现无刷新动态调用股票信息
Nov 01 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
JQuery select(下拉框)操作方法汇总
Apr 15 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
Aug 24 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 Javascript
Ajax常用封装库——Axios的使用
May 08 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 #Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 #Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 #Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 #Javascript
JavaScript中concat复制数组方法浅析
Jan 20 #Javascript
JavaScript中import用法总结
Jan 20 #Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 #Javascript
You might like
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
php 类自动载入的方法
2015/06/03 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
Python中的日期时间处理详解
2016/11/17 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
英文简历中的自我评价用语
2013/12/09 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
店长职务说明书
2014/02/04 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
工作会议简报
2015/07/20 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
详细了解MVC+proxy
2021/07/09 Java/Android