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 相关文章推荐
Add Formatted Data to a Spreadsheet
Jun 12 Javascript
匹配任意字符的正则表达式写法
Apr 29 Javascript
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
最新Javascript程序员面试试题和解题方法
Nov 23 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
详解JavaScript中的数组合并方法和对象合并方法
May 11 Javascript
JavaScript中创建原子的方法总结
Aug 26 Javascript
如何使用JS console.log()技巧提高工作效率
Oct 14 Javascript
四十九个javascript小知识实用技巧
Nov 20 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python正则-re的用法详解
2019/07/28 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
本科生详细的自我评价
2013/09/19 职场文书
学历公证书范本
2014/04/09 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
优秀班集体申报材料
2014/12/25 职场文书
事业单位个人总结
2015/02/12 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python