vue + swiper加载问题

在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: {

  }
}

你可能感兴趣的:(vue + swiper加载问题)