在vue中使用setInterval的方法示例
昨天在用vue開發(fā)項(xiàng)目的時(shí)候遇到一個(gè)坑,在群友的探討中,成功的解決了這一問(wèn)題。
具體情形如下:使用vue開發(fā),在頁(yè)面中有一個(gè)人數(shù)統(tǒng)計(jì)組件,人數(shù)統(tǒng)計(jì)是要?jiǎng)討B(tài)變化數(shù)據(jù)的,由于目前沒(méi)有真實(shí)數(shù)據(jù),那么我想的是用隨機(jī)數(shù)和setInterval來(lái)改變data里面的數(shù)據(jù),從而做到數(shù)據(jù)實(shí)時(shí)變化,這樣方便與我來(lái)做數(shù)字翻頁(yè)動(dòng)畫。
代碼如下:
<template> <div class="totel-number"> <div class="panel-top"> <div class="panel-top_Left"></div> <div class="panel-top_Text flex-center" >數(shù)量</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() { //設(shè)置定時(shí)器,每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>
大家有發(fā)現(xiàn)問(wèn)題嗎?
在beforeMount里面console.log(this.totelNumber)會(huì)發(fā)現(xiàn)數(shù)據(jù)是在變化的,但是頁(yè)面上是沒(méi)有任何變化。
這是什么原因呢?
方法:先把問(wèn)題分解開,就懷疑的幾個(gè)點(diǎn)做正反的驗(yàn)證
在多次驗(yàn)證在多次驗(yàn)證和查看文檔后強(qiáng)哥找到了:
需要注意的是有兩種情況不會(huì)觸發(fā)視圖更新,需要換種變通寫法:
- 當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如: vm.items[indexOfItem] = newValue
- 當(dāng)你修改數(shù)組的長(zhǎng)度時(shí),例如: vm.items.length = newLength
更具這個(gè)思路我就明白了為什么會(huì)有這樣的坑,然后就將代碼進(jìn)行了改進(jìn):
<script> import $ from 'jquery' import * as d3 from 'd3'; export default { data(){ return { totelNumber: new Array(8) } }, beforeMount() { //設(shè)置定時(shí)器,每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>
如此一來(lái)就可將數(shù)據(jù)實(shí)時(shí)動(dòng)態(tài)刷新呈現(xiàn)在頁(yè)面上。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue $mount實(shí)戰(zhàn)之實(shí)現(xiàn)消息彈窗組件
這篇文章主要介紹了Vue $mount實(shí)現(xiàn)消息彈窗組件的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04vue3點(diǎn)擊按鈕下載文件功能的代碼實(shí)現(xiàn)
在寫vue項(xiàng)目時(shí),有個(gè)需求是點(diǎn)擊表格中某一行的下載按鈕,然后開始下載這一行對(duì)應(yīng)的文件,所以本文小編給大家介紹了使用vue3實(shí)現(xiàn)點(diǎn)擊按鈕下載文件功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-01-01el-tree?loadNode懶加載的實(shí)現(xiàn)
本文主要介紹了el-tree?loadNode懶加載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08vue中el-autocomplete與el-select的異同
本文主要介紹了vue中el-autocomplete與el-select的異同,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05vue使用echarts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)的示例詳解
這篇文章主要為大家詳細(xì)介紹了vue如何使用echarts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù),文中的示例講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11關(guān)于Elementui中toggleRowSelection()方法實(shí)現(xiàn)分頁(yè)切換時(shí)記錄之前選中的狀態(tài)
這篇文章主要介紹了關(guān)于Elementui中toggleRowSelection()方法實(shí)現(xiàn)分頁(yè)切換時(shí)記錄之前選中的狀態(tài),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Vue如何調(diào)用接口請(qǐng)求頭增加參數(shù)
這篇文章主要介紹了Vue如何調(diào)用接口請(qǐng)求頭增加參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01vue實(shí)現(xiàn)表格數(shù)據(jù)的增刪改查
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)表格數(shù)據(jù)的增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Vue.js 2.0 移動(dòng)端拍照壓縮圖片上傳預(yù)覽功能
這篇文章主要介紹了Vue.js 2.0 移動(dòng)端拍照壓縮圖片上傳預(yù)覽功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03