视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
在vue中使用setInterval的方法示例
2020-11-27 21:58:47 责编:小采
文档


昨天在用vue开发项目的时候遇到一个坑,在群友的探讨中,成功的解决了这一问题。

具体情形如下:使用vue开发,在页面中有一个人数统计组件,人数统计是要动态变化数据的,由于目前没有真实数据,那么我想的是用随机数和setInterval来改变data里面的数据,从而做到数据实时变化,这样方便与我来做数字翻页动画。

代码如下:

<template>
 <div class="totel-number">
 <div class="panel-top">
 <div class="panel-top_Left"></div>
 <div class="panel-top_Text flex-center" >数量</div>
 <div class="panel-top_Right"></div>
 </div>
 <div class="panel-body">
 <div class="counter-wrap">
 <ul class="counter-board">
 <li class="num-board" v-for="item in totelNumber">
 <span class="num u">
 <i class="w">{{item}}</i>
 </span>
 <span class="num b">
 <i class="w">{{item}}</i>
 </span>
 </li>
 </ul>
 </div>
 </div>
 <i class="cc-Corner cc-C-t cc-C-l"></i>
 <i class="cc-Corner cc-C-t cc-C-r"></i>
 <i class="cc-Corner cc-C-b cc-C-r"></i>
 <i class="cc-Corner cc-C-b cc-C-l"></i>
 </div>
</template>
<script>
import $ from 'jquery'
import * as d3 from 'd3';
export default {
 data(){
 return {
 totelNumber: new Array(8)
 }
 },
 beforeMount() {
 //设置定时器,每3秒刷新一次
 var self = this;
 setInterval(getTotelNumber,1000)
 function getTotelNumber() {
 for(let i=0; i < self.totelNumber.length; i++){
 self.totelNumber[i] = Math.ceil(Math.random()*10) -1 
 }
 }
 getTotelNumber(); 
 }
}
</script>

大家有发现问题吗?

在beforeMount里面console.log(this.totelNumber)会发现数据是在变化的,但是页面上是没有任何变化。

这是什么原因呢?

方法:先把问题分解开,就怀疑的几个点做正反的验证

在多次验证在多次验证和查看文档后强哥找到了:

需要注意的是有两种情况不会触发视图更新,需要换种变通写法:

- 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue
- 当你修改数组的长度时,例如: vm.items.length = newLength

更具这个思路我就明白了为什么会有这样的坑,然后就将代码进行了改进:

<script>
import $ from 'jquery'
import * as d3 from 'd3';
export default {
 data(){
 return {
 totelNumber: new Array(8)
 }
 },
 beforeMount() {
 //设置定时器,每3秒刷新一次
 var self = this;
 setInterval(getTotelNumber,1000)
 function getTotelNumber() {
 let newArray = new Array(8)
 for(let i=0; i < this.totelNumber.length; i++){
 newArray[i] = Math.ceil(Math.random()*10) -1
 }
 self.totelNumber = newArray
 }
 getTotelNumber(); 
 }
}
</script>

如此一来就可将数据实时动态刷新呈现在页面上。

下载本文
显示全文
专题