在vue组件中使用swiper,而swiper中的数据是ajax获取的,会导致轮播没有效果。
这是因为ajax获取数据是异步的,所以new swiper()会先执行,等到ajax数据获取之后,dom重新渲染,但是此时swiper早就初始化完成了,轮播图里并不会有ajax请求回的新数据,所以我们需要在页面渲染之后重新 new swiper()。
解决方法:使用 vue.nextTick() 和 setTimeout()
export default {
data(){
return{
}
},
created() {
},
mounted() {
this.$nextTick(()=>{
setTimeout(()=> {
this.mySwiper = new Swiper('.swiper-container', {
slidesPerView: 3,
spaceBetween: 30,
centeredSlides: true,
loop: true,
pagination: {
el: '.swiper-pagination',
clickable: true,
},
autoplayDisableOnInteraction: false,
observer: true, //修改swiper自己或子元素时,自动初始化swiper
observeParents: true //修改swiper的父元素时,自动初始化swiper
})
},300)
})
},
methods: {
}
}