【问题标题】:Cannot display images in Vuejs无法在 Vuejs 中显示图像
【发布时间】:2019-09-24 01:21:12
【问题描述】:

我已经使用 bootstrap-vue 设置了一个轮播。轮播项目是使用 for 循环和数组动态创建的。该数组包含三个具有以下键的对象:id、标题、文本和图像路径。到目前为止,我能够显示标题和文本但不能显示图像。我检查了控制台,没有错误。因此,我很困惑。下面是我的代码和问题截图

更新:我已经尝试解决这个问题 2 天了,非常需要帮助!

这是我的项目结构

这是我的代码

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

<script>

export default {
  data() {
    return {
      carouselItems: [
        {
          id: 1,
          caption: "Memories",
          image: "@/assets/images/Homepage-min.jpg",
          text: "Memories(1)"
        },
        {
          id: 2,
          caption: "Memories",
          image: "@/assets/images/Homepage-min.jpg",
          text: "Memories(2)"
        },
        {
          id: 3,
          caption: "Memories",
          image: "@/assets/images/Homepage-min.jpg",
          text: "Memories(3)"
        }
      ],
      slide: 0,
      sliding: null
    };
  },
  methods: {
    onSlideStart(slide) {
      this.sliding = true;
    },
    onSlideEnd(slide) {
      this.sliding = false;
    }      
  }
};
</script>

这是一个截图:

更新我去看看网络标签,看看我是否指定了错误的图像路径。但是,图像路径是正确的,因为状态码是 304。这似乎是什么问题?有人可以帮忙吗?

更新:我已经删除了样式并用以下代码替换了它

:img-src="item.image"

保存更改并刷新后,我可以看到一个图标,指示浏览器无法加载图像。

更新我已成功将图像渲染到轮播幻灯片。显然,如果图像路径是相对的,则需要“require”。我已将这部分代码更新为以下内容

data() {
    return {
      carouselItems: [
        {
          id: 1,
          caption: "Memories",
          image: require("@/assets/images/Homepage-min.jpg"),
          text: "Memories(1)"
        },
        {
          id: 2,
          caption: "Memories",
          image: require("@/assets/images/Homepage-min.jpg"),
          text: "Memories(2)"
        },
        {
          id: 3,
          caption: "Memories",
          image: require("@/assets/images/Homepage-min.jpg"),
          text: "Memories(3)"
        }
      ],
      slide: 0,
      sliding: null
    };
  },

更新 但是,现在我面临另一个问题,在移动模式下,图像不适合屏幕的整个高度。我希望它反应灵敏。这是我的问题的屏幕截图

更新 2019 年 7 月 5 日我仍在尝试解决此问题,谁能帮我解决 CSS 问题?

【问题讨论】:

  • 您是否在 webpack 配置或您正在使用的任何构建过程中为您的图像路径正确设置了 @ 别名?您可以在开发者工具的控制台或网络选项卡中看到什么?客户端是在正确的位置、错误的 URL 下请求图像,还是根本不请求图像?
  • 嗨,@Connum 感谢您的回复!由于我是编程新手,我不确定您在说什么。 “您是否为图像路径正确设置了@别名”是什么意思。为了提供更多背景信息,我使用 Vue CLI 创建了这个 Vue 项目。
  • @Connum 此外,我通过引用此 stackoverflow 帖子 stackoverflow.com/questions/47313165/… 来学习引用我的资产文件夹
  • 当您在浏览器中按 F12 打开开发工具时,请查看控制台选项卡和网络选项卡。您应该会看到浏览器尝试在哪里找到图像并失败并出现 404 错误,因为它没有找到它们。从那里开始,您应该能够通过在图像路径中添加“../”来修复路径。
  • 嗨@Connum,在网络选项卡的Homepage.min.jpg下,浏览器返回304状态码(未修改)

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


【解决方案1】:

尝试使用img-src="https://xxxxx" 而不是更改style。你应该在你的代码中得到类似的东西:

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

或者您可以在&lt;b-carousel-slide&gt; 中使用实际的img 标签:

     <b-carousel-slide>
        <img
          slot="img"
          class="d-block img-fluid w-100"
          width="1024"
          height="480"
          src="https://xxxxxx"
          alt="image slot"
        >
      </b-carousel-slide>

您还应该检查您的图片“路径”,因为 webpack 会自动为每张图片添加一个唯一 ID,有时在某些情况下可能会很麻烦,只需检查 webpack 配置是否适用于您的图片。

【讨论】:

  • 您好,感谢您的回复!我删除了样式并将其替换为以下内容:img-src=item.image,但它仍然无法正常工作。另外,您如何检查图片的“路径”?此外,我对我的帖子进行了编辑,请查看
  • 好吧,现在img-src 工作正常,路径找不到@ 部分。我建议只使用 relative-url 以便正确呈现。如果这不起作用,您需要检查如何更改 webpack 配置以使用 @
  • 嗨@Omer Tal,我终于解决了我的问题。我已经更新了我的帖子。但是,现在我面临另一个问题,在移动版本中图像没有响应并且不适合整个视口。此外,文本也未与图像的中心对齐。你能帮帮我吗?
  • &lt;b-carousel&gt; 标记中,您可以给出高度和宽度:img-width="1024" img-height="480" 所以让我们为您的情况说:&lt;b-carousel id="carousel-1" v-model="slide" :interval="10000" controls indicators background="#ababab" img-width="1024" img-height="480" style="text-shadow: 1px 1px 2px #333;" @sliding-start="onSlideStart" @sliding-end="onSlideEnd" &gt;
【解决方案2】:

&lt;b-carousel&gt; 不会裁剪图像,它会尝试保留其原生纵横比(与原生 Bootstrap V4.x 轮播相同)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 2020-06-29
    • 2021-06-15
    • 2012-06-16
    • 2021-02-28
    • 2020-02-19
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多