欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在vue中使用setInterval的方法示例

程序员文章站 2022-04-29 13:37:30
昨天在用vue开发项目的时候遇到一个坑,在群友的探讨中,成功的解决了这一问题。 具体情形如下:使用vue开发,在页面中有一个人数统计组件,人数统计是要动态变化数据的,...

昨天在用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>

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

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