解决vue v-for渲染的异步请求数据无法使用better-scroll插件滚动问题

  • 背景
    使用better-scroll插件实例化滚动列表,但列表中的数据是异步请求,有时列表中数据还没有渲染完成,插件就已经实例化导致bug,解决问题的根源在于令dom全部渲染完成后再实例化插件
    最简单的方法就是设置定时器,等待一定时间再实例化插件,但这种方法容易浪费时间等待或者等待时间不足仍然导致bug
  • 较好的解决方法就是watch+vm.nextTick
    nextTich: 在下次 DOM 更新循环结束以后执行延迟回调。在修改数据以后当即使用这个方法,获取更新后的 DOM
    $nextTick 里面DOM更新是指页面上渲染的数据已经是最新的数据。而不仅是data的数据更新

那么我们可以用watch监听v-for渲染的列表数据,一旦该数据发生改变,说明异步请求更新了该数据,再使用this.$nextTick()函数执行回调,执行插件实例的refresh()方法即可

核心代码如下:

watch: {
    cities () {
      this.$nextTick(function () {
        this.scroll.refresh()
      })
    }
  }

其中,cities是滚动列表中动态渲染的数据

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用axios请求数据,并且在v-for指令中渲染数据时,如果结构没有显示出来,可能存在以下几个可能的问题: 1. 没有正确引入axios:在Vue项目中,首先要确保已经正确安装并引入了axios依赖包,可以通过在项目的入口文件或者单独的组件中使用import语句来引入axios,例如:import axios from 'axios'。 2. 请求数据的路径错误:在使用axios发送请求时,必须确保请求的路径是正确的,即与后端提供数据的API接口一致。可以通过在浏览器的控制台查看网络请求来确定是否成功发送了请求,并且获取了正确的数据。如果请求路径错误,可以尝试重新检查请求的路径是否正确。 3. 数据结构不正确:在使用axios请求数据后,可能还需要对获取到的数据进行处理,以符合v-for指令的渲染要求。例如,如果获取到的数据是一个对象,而v-for指令需要的是一个数组,则需要将对象转化为数组,然后再进行渲染。 4. 异步请求数据的时机问题:由于axios请求数据是异步的,所以需要确保在数据请求完成后才进行渲染。可以通过使用Vue的生命周期钩子函数,如created或mounted,来保证数据已经获取到后再进行渲染。 综上所述,如果在Vue使用axios请求数据后,v-for指令没有正确渲染数据,可能需要检查axios的引入和使用是否正确、请求路径是否正确、数据结构是否符合要求以及异步请求数据的时机是否正确。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值