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 相关文章推荐
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
jquery实现图片切换代码
Oct 13 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
浅谈Vue Element中Select下拉框选取值的问题
Mar 01 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
Echarts实现单条折线可拖拽效果
Dec 19 Javascript
jQuery实现鼠标移入显示蒙版效果
Jan 11 jQuery
如何通过Proxy实现JSBridge模块化封装
Oct 22 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
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
javascript的函数
2007/01/31 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python实现队列的方法
2015/05/26 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
20行python代码实现人脸识别
2019/05/05 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
表达自我的市场:Society6
2018/08/01 全球购物
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
广告学专业应届生求职信
2013/10/01 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
中国梦团日活动总结
2014/07/07 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
golang 接口嵌套实现复用的操作
2021/04/29 Golang
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js