Vue + ElementUI + Viewer翻页后图片无法预览 Vue父子组件异步通信问题

问题

如标题,我在一个vue项目中使用了element的分页组件,当页数更改时,通过页数使用axios向后端请求从数据库对应的一部分数据。例如当前页数为1,则从数据库中取第一到八条数据。对于展示的数据,为了使图片实现预览的功能,我是用了一个图片预览插件viewer.js。可当我从第一页跳转到第二页后,发现点击页面 的图片,无法实现预览。
viewer.js的使用可以参考我的另一篇博客:Vue实现图片预览(Viewer.js)

分析

vue父子组件异步通信导致。
这是父组件向子组件传值:在这里插入图片描述
每当页数发生变化,我就调用封装了axios的getData()方法,请求后端的值。函数中参数val为当前页数:
![在这里插入图片描述](https://img-blog.csdnimg.cn/7c2ddf279f5d4c05ac6efcd23feea2fb.png
请求成功,得到返回的数据后,改变list的值,实现数据更新:
在这里插入图片描述
为了检测问题,我在子组件的created()中判断一下是否得到数据:
在这里插入图片描述
运行项目,查看控制台:
一开始,请求0~8条数据,成功,父子组件都成功更新:
在这里插入图片描述
点击第二页,实现翻页,父组件的craeted函数输出正常,而子组件的created函数没有输出,也就是子组件并没有创建!:
在这里插入图片描述
原因:异步问题,axios是基于ajax的异步请求,当父组件执行getData函数取取值时,子组件创建时收到的props还是上一组list的值,即二者之间发生了时间差,父组件取请求后端肯定比直接渲染子组件慢,所以出现了子组件渲染错误。父组件取到值后,子组件已经渲染完成了!

解决

在父组件渲染加入判断,如果父组件还没有取到数据,即list为空,就不渲染子组件。(注意list,在第一页list是有值的,所以在下一次取数据前,必须将list清空,否则判断list仍然是有值的,即上一页的数据)。
父组件渲染子组件:
在这里插入图片描述

点击页面:
在这里插入图片描述
控制台(子组件正确创建):
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小绵杨Yancy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值