Vue页面加载 多条倒计时 不刷新

用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);
            },
           
        }
    });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值