vue数据渲染不成功

需求:页面上同时多个倒计时;

有个数组,数据层级为3级,create里面写了一个setInterval定时器,每隔一秒改变这个数组中的数据;

我的思路是,单独给倒计时新建一个数组,每秒循环一次数据,改变一次倒计时数据里的数据;

改变规则:

  1. 定时器循环之前,先获取当前时间戳(只获取一次),给个常量duration=0;
  2. 进入定时器,每秒duration+1,进入循环,新建一个数组times,计算endtime=原本数组里的结束时间-当前时间戳-duration;
  3. 判断,endtime=endtime>0?endtime:0;
  4. 将endtime转换为时,分,秒,将时分秒分别插入times;
  5. 将times插入倒计时数组,结束循环;

重点:

到倒计时定时器数组结构如下:

vue数据渲染不成功_第1张图片

 数据有3层,所以动态更新数据的时候,页面上并不能即时渲染;

解决方式,在改变数据的下面写上:this.$forceUpdate()

代码如下:我用的是uni-app


				

					

						

						
							倒计时:
							
								{{(times<10)?'0'+times:times}}
							
						
						{{item.name}}
						¥{{item.retailPrice}}
					
				
			

数据部分:

seckillList: [{
					id: 0,
					picUrl: '',
					name: 'namenamenamenamenamenamename',
					retailPrice: '99',
					time: '1559294823'
				}, {
					id: 1,
					picUrl: '',
					name: 'name1name1name1name1name1name1name1',
					retailPrice: '99',
					time: '1559291823'
				}, {
					id: 2,
					picUrl: '',
					name: 'name1',
					retailPrice: '99',
					time: '1559294827'
				}, {
					id: 3,
					picUrl: '',
					name: 'name1',
					retailPrice: '99',
					time: '1559294816'
				}], //秒杀
				seckillListtimes: [], //定时器列表

js部分:

async daotime() { //设置倒计时
		var that = this;
		var myDate = Math.round(new Date().getTime() / 1000).toString();//获取当前时间戳,到秒
		
		that.currenttime = myDate;
		var seckillList = that.seckillList;
		var duration=0;
		setInterval(()=>{
			duration+=1;
			for (var i = 0; i < that.seckillList.length; i++) {
				let times = new Array;
				var endtime = that.seckillList[i].time - myDate-duration;
				endtime=endtime>0?endtime:0;
				var daoH = Math.floor(endtime / 3600);
				times.push(daoH)
				var daoM = Math.floor((endtime - daoH * 3600) / 60);
				times.push(daoM)
				var daoS = (endtime - daoH * 3600 - daoM * 60);
				times.push(daoS);
				that.seckillListtimes[i]=times;
				that.$forceUpdate()
			}
		},1000)
	},

 

你可能感兴趣的:(vue)