vue2.0动态设置属性后数据更新,视图不更新问题;Vm.set(target,key,value)(即可解决)

公司接了个项目前端;需要用到列表的倒计时的功能;
在这里插入图片描述
倒计时功能的实现思路是:
1、全局一个定时器
2、然后根据需要倒计时的列进行倒计时;(全局每秒执行一次,把需要倒计时的列倒计时)
3、然后再更新列表数据;

遇到数据更新数据不更新的问题时,就要考虑到新增的属性没有双向绑定;
vm.set(target,key,value);//这是vue为动态添加的属性提供的解决方式,原理还是object.definePorperty()这个语法,这个语法vue原理基础和关键
在这里插入图片描述

上面代码就是关键了,设置对象的key为双向绑定,此时数据更新(会更新视图)或者是视图更新(会更新数据);

具体部分关键代码:
js:

 //定时读秒初始化
    timeLimitInit() {
      let _this = this;
      let t = setInterval(() => {
        for (var i in _this.timeLimitKV) {
          let k = "" + i;//转字符
          let s = _this.timeLimitKV[k]
          if (s < 1) continue;
          s = s - 1
          _this.timeLimitKV[k] = s
          //console.log("秒数:" + k + ":" + _this.timeLimitKV[k])
          //这里的设置可以设置动态添加的属性实现双向绑定(这里是关键)
          _this.$set(_this.timeLimitKV, k, s)
          if (s == 0) {
            _this.timeEndNoticeItem(k)
            // delete _this.timeLimitKV[k]
          }
        }
      }, 1000)
    },
    //到时间了回调
    timeEndNoticeItem(k) {
      let _this=this;
      console.log("回调" + k)
      let mRID=k.replace("time","")
      let tf = _this.$store.commit("autoGrabOrder", mRID);
      console.log(k+"抢单到时了,自动变为待接单状态:"+tf)
    },
    //设置需要倒计时的单子
    lunxunSetTimeout(item) {
      let statu = item.procCode
      if (statu == '01') {
        let key = "time" + item.mRID
        if (!this.timeLimitKV[key] && !this.timeLimitKV[key] != 0)
          this.$set(this.timeLimitKV, key, this.timeLimitSecond)
      }
    }

template的部门html代码:

<div class="mlist" v-for="(item,index) in list" :key="index">
      <template v-if="lunxunSetTimeout(item)"></template>
      <div class="mtop">
        <div class="mfl" @click="pointToCenterFun(item)">
          <div class="order-tip-div order-tip-pu" v-if="item.isNormalCustomer == 1"></div>
          <div class="order-tip-div order-tip-mei" v-if="item.isMei == 1"></div>
          <div class="order-tip-div order-tip-min" v-if="item.isMin == 1"></div>
          {{ item.repairsListId }}
        </div>
        <div class="mfr">
          <button @click="operateClick(item)" :class="item.procCode|blackgoundFilter">
        
            {{ $options.components.orderUtil.methods.getOrderStatuName(item.procCode) }}
            <span v-if="item.procCode=='01'">
            ({{ timeLimitKV['time' + item.mRID] }})
          </span>
          </button>

        </div>
      </div>
      <div class="line"></div>
      <div class="mbottom">
        <div class="mfl"><span class="span1">故障描述:</span><span class="span2">{{ item.cause }}</span></div>
        <div class="mfr">
          <router-link :to="{path:'/workorder/detail/'+item.mRID, query: {id:item.mRID}}">查看详情</router-link>
        </div>
      </div>
    </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值