vantui中轮播图的小坑

545 阅读1分钟

前言

三人行,必有我师

场景

编写一个公共的轮播组件,在其他组件中传值进行使用时,页面能够正常显示图片,但是排列会出现问题,页面的排列方式只会按照子组件中的原有的属性值进行排列,即使在页面当中的函数中修改其属性,其排列方式依然不会发生改变。

原因

当轮播图出现首次渲染后,其后面的属性值即使发生改变,轮播图后续也不会重新渲染

解决方法

那就是给轮播图制造重新渲染的机会,或者在所有属性定制完后开始渲染。最简单的方式就是给子组件添加v-if,在接收到父组件传过来的值时再展示。

<template>
  <div class="kehucontent">
    <swiper :options="kehuSwiperOptions" ref="swipe" v-if="showswipe">
      <swiper-slide v-for="(item, index) in swiperArr" :key="index">
        <div class="kehuItem">
          <img :src="baseURL.picAddr + item.content_icon_url" alt="">
        </div>
      </swiper-slide>
      <div class="my-swiper-pagination" slot="pagination"></div>
    </swiper>
  </div>
</template>

<script>
  import { swiper, swiperSlide } from 'vue-awesome-swiper';
  import 'swiper/dist/css/swiper.css';
  import {mapState} from "vuex";
  export default {
    name: 'kehuCases',
    props: {
      swiperArr: {
        type: Array,
        default: () => {return []}
      }
    },
    data() {
      return {
        kehuSwiperOptions: {
          autoplay:false,
          slidesPerView: 3, // 一次显示多个slides
          slidesPerGroup: 3, // 3列为一页
          slidesPerColumn: 4, //多行Slides 分布
          pagination: {
            el: '.my-swiper-pagination', // 分页器样式名
            clickable: true, // 分页器点击有效
            bulletClass: 'my-bullet', // 分页器样式
            bulletActiveClass: 'my-bullet-active' // 激活状态样式
          }
        },
        showswipe:false,
      }
    },
    watch:{
      'swiperArr': {
        handler(val) {
          if (val.length) {
            this.showswipe = true;//开始渲染
          this.kehuSwiperOptions.slidesPerView = 1;//新的排列方式
          }
        }
      }
    }
  }
</script>