无法将图像动态渲染到轮播Vuejs

时间:2019-05-04 06:26:52

标签: twitter-bootstrap vue.js bootstrap-4 carousel bootstrap-vue

我已经使用bootstrap-vue设置了轮播。我使用了for循环和对象数组来动态创建组件。在每张幻灯片中,我将包括文本和背景图像。我能够动态渲染文本。但是,背景图像仅出现在第一张幻灯片上。对于后续幻灯片,将不再渲染图像。似乎是什么问题?下面是我的代码和结果的屏幕截图

更新:我仍然无法使它正常工作。谁能帮我?

<template>
  <div>
    <b-carousel
      id="carousel-1"
      v-model="slide"
      :interval="4000"
      controls
      indicators
      background="#ababab"
      style="text-shadow: 1px 1px 2px #333;"
      @sliding-start="onSlideStart"
      @sliding-end="onSlideEnd"
    >
      <!-- Text slides with image -->
      <b-carousel-slide
        v-for="item in carouselItems"
        :key="item.id"
        :text="item.text"
        :style="{ 'background-image' : 'url(\'' + item.image + '\')' }"
      ></b-carousel-slide>
    </b-carousel>
    <ProductList/>
  </div>
</template>

<script>
// 1. Loading images asychronously later on from S3
// https://stackoverflow.com/questions/50659676/how-to-load-image-src-url-in-vuejs-asyncronously
import ProductList from "@/components/product/ProductList.vue";

export default {
  components: {
    ProductList
  },
  data() {
    return {
      carouselItems: [
        {
          id: 1,
          image: "https://source.unsplash.com/LAaSoL0LrYs/1920x1080",
          text: "Nulla vitae elit libero, a pharetra augue mollis interdum. (1)"
        },
        {
          id: 2,
          image: "https://source.unsplash.com/LAaSoL0LrYs/1920x1080",
          text: "Nulla vitae elit libero, a pharetra augue mollis interdum. (2)"
        },
        {
          id: 3,
          image: "https://source.unsplash.com/LAaSoL0LrYs/1920x1080",
          text: "Nulla vitae elit libero, a pharetra augue mollis interdum. (3)"
        }
      ],
      slide: 0,
      sliding: null
    };
  },
  methods: {
    onSlideStart(slide) {
      this.sliding = true;
    },
    onSlideEnd(slide) {
      this.sliding = false;
    }
  }
};
</script>

<style scoped>
.carousel-item {
  height: 100vh;
  min-height: 350px;
  background: no-repeat center center scroll;
  -webkit-background-size: cover;
  -moz-background-size: cover;
  -o-background-size: cover;
  background-size: cover;
}
</style>

轮播首次呈现时 Carousel when it was first rendered

后续幻灯片不显示图像 Subsequent slide not display image

返回幻灯片1,背景图像消失了 Returning back to slide 1 and the background image is gone

1 个答案:

答案 0 :(得分:0)

在使用bootstrap-vue库时,可以使用“标题”属性代替“文本”,并使用“ img-src”代替style:background。因为b-carousel-slide组件会覆盖样式标签。

<b-carousel-slide
        v-for="item in carouselItems"
        :key="item.id"
        :caption="item.text"
        :img-src="item.image"
      ></b-carousel-slide>

如果您想为自定义对象设置自定义样式,则可以为标签设置其他类attr,例如:

<b-carousel-slide
      class="MyCustomClass"
      ....
      ></b-carousel-slide>
<style>
    .MyCustomClass {
        width: 100%;    
        object-fit: cover; 
    }
</style>

但是请注意,您使用的旋转木马既有响应能力,又有全宽度。我认为您的问题是另外一回事。