Vue轮播组件数据动态更新后不自动切换怎么办?
我用 Vue 写了个简单的轮播图,数据是从接口异步获取的,但图片加载完后轮播不会自动播放,手动点左右箭头却能正常切换。是不是哪里没触发响应式更新?
我试过在 mounted 里加 this.$nextTick(),也试过把 autoplay 设成 true,都不行。控制台也没报错,就是静止在第一张。
<template>
<carousel :autoplay="true" :loop="true">
<carousel-item v-for="img in imageList" :key="img.id">
<img :src="img.url" alt="" />
</carousel-item>
</carousel>
</template>
<script>
export default {
data() {
return { imageList: [] }
},
async mounted() {
this.imageList = await fetchImages()
}
}
</script>
通用的做法是两种:
1. 加个v-if确保数据加载完再渲染组件:
2. 用watch监听数据变化,然后调用轮播的refresh方法(需要你用的轮播库支持):
如果你用的是Swiper,还需要在mounted里重新初始化:
顺便吐槽下,这问题我至少遇到过5次,每次换轮播库都要重新踩坑...