用Vue + apicloud 写一个列表页,页面上的记录都有一个时间倒计时显示。
用了三天才从坑里出来,就因为少了一句话:vm.$forceUpdate();
具体写法如下:
1. apiready方法的定义,
页面数据 vm.init();
下拉刷新
上拉加载
拍卖倒计时
apiready = function() {
vm.init();
//下拉刷新
api.setRefreshHeaderInfo({
visible: true,
loadingImg: 'widget://image/refresh.png',
bgColor: '#ccc',
textColor: '#fff',
textDown: '下拉刷新...',
textUp: '松开刷新...',
showTime: true
}, function(ret, err) {
vm.init();
vm.page = 1;
setTimeout('api.refreshHeaderLoadDone()', 500);
});
//上拉加载
api.addEventListener({
name: 'scrolltobottom',
extra: {
threshold: 0 //设置距离底部多少距离时触发,默认值为0,数字类型
}
}, function(ret, err) {
vm.page += 1;
vm.init();
});
//拍卖倒计时
vm.timer_count();
};
2. Vue 的声明及相应方法
注:vm.$forceUpdate();必须要加这一项,不然倒计时即使出现也不会有变化。
var vm = new Vue({
el: '#app',
data: {
list: [],
city: 366,
check_type_id: 0,
status: 0,
page: 1,
search_param:''
},
methods: {
init: function() {
api.ajax({
url: car_url,
method: 'post',
data: {
values: {
city: vm.city,
page: vm.page,
status: vm.status,
check_type_id: vm.check_type_id,
search_param: vm.search_param,
}
}
}, function(ret, err) {
if (ret) {
if (vm.page == 1) {
vm.list = ret.data.list;
} else {
if (ret.data.list.length > 0) {
for (var i = 0; i < ret.data.list.length; i++) {
vm.list.push(ret.data.list[i]);
}
} else {
api.toast({
msg: '没有数据啦!',
duration: 2000,
location: 'bottom'
});
return false;
}
}
} else {
// alert( JSON.stringify( err ) );
}
});
},
timer_count:function(){
setInterval(function() { //倒计时
var djs = "";
for (var key in vm.list) {
var aaa = parseInt(vm.list[key]["end_time"]);
var bbb = new Date().getTime();
var rightTime = aaa*1000 - bbb;
if (rightTime > 0) {
var dd = Math.floor(rightTime / 1000 / 60 / 60 / 24);
var hh = Math.floor((rightTime / 1000 / 60 / 60) % 24);
var mm = Math.floor((rightTime / 1000 / 60) % 60);
var ss = Math.floor((rightTime / 1000) % 60);
var day = dd==0?'':dd + " 天";
var hour = hh==0?'':hh+ " 小时";
var hour = mm==0?"": mm + " 分";
var sec = ss==0?"":ss+ " 秒";
djs = day + hour + hour + sec;
} else {
djs = '暂无';
}
// console.log(djs);
vm.list[key]["djs"] = djs; // 给数组加上计时项
vm.$forceUpdate(); //必须加上,不然页面不刷新
}
}, 1000);
},
}
});