11.Vue中使用Ajax获取数据后界面未更新,使用$forceUpdate()强制更新

有个页面在加载后要从后台获取数据,然后显示

不过好像是数据层次有点多?像下面这样,获取的数据放在details里面,然后页面上对应的数据没有显示

res:[
  {
    name:'tom',
    age:10,
    details:[
      {
        name:'jerry'
      }
    ]
  }
]

但是在 Vue Devtools 里面数据是有的

然后在mounted执行完查询函数以后,使用$forceUpdate()强制刷新,页面上数据也没有显示,然后用 alert 显示发现数据是空的

mounted: function () {
  this.getdata();
  this.$forceUpdate();     //强制刷新视图
  alert(JSON.stringify(this.res[0]))
}

然后眉头一皱,发现事情并不简单,好像是因为Ajax是异步执行的,数据还在获取中

然后想了一下,既然数据还在获取,那我就等下在强制刷新,

然后将上面的mounted函数改了一下,设置一个 20ms 后执行强制刷新的定时器,然后数据就能够显示了

mounted: function () {
  this.getdata();
  // this.$forceUpdate();     //强制刷新视图
  alert(JSON.stringify(this.res[0]))  
  // 此时 直接查询 是空的 $forceUpdate() 刷新也没有显示
  // 这里设置 在加载完成后 20ms 后再强制刷新视图 
  _this=this;
  setTimeout(function(){ 
    _this.$forceUpdate(); 
  },20)
}

这个定时器的本意是,在 data 中有数据后再强制刷新

但是如果数据多了的话,获取数据时间再长一点,那不知道能不能显示出来了,定时器的时间也不能过长

然后就在想怎么判断数据已经获取完成了呢,然后突然想到 Ajax 本来就有获取成功和获取的回调函数

又重新改了一下,发现强制刷新成功了,页面能够显示数据,真是蠢到家了QAQ

mounted: function () {
  this.getdata();
}
----------------------------
getdata(){
  var _this = this; 
  Ajax({
    type: 'POST',
    url: this.url,
    data: 'code=' + this.code, 
    success: function (data) {
      if ('0' == data.erron) {  
        _this.res[0].details.push(data.data); 
        _this.$forceUpdate();
      } else {
        _this.res[0].details.push({ NAME: ''});
        console.log(data.msg)
        _this.$forceUpdate();
        return;
      }
    }.bind(this),
    failed: function (err) {
      alert('请求失败' + err.status);
      return;
    }
  });
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值