【问题标题】:Dynamically display images on vue front end from api从 api 在 vue 前端动态显示图像
【发布时间】:2021-03-10 22:53:36
【问题描述】:

我正在尝试根据 api 调用给出的路径动态显示图像。所有其他数据都正确显示,但不是图像。我怀疑我没有输入正确的路径。前端位于名为client 的文件夹中,图像位于cms 文件夹的子目录中,与client 位于同一目录中。

前端:root/client/src/components/Arrangements.vue

图片:root/cms/public/uploads/some-image.png

这是我的代码:

模板


    <div v-if="arrangements.length">
        <div :key="arrangement.index" v-for="arrangement in arrangements">
            <img :src="getImages(arrangement.img.formats.thumbnail.url)" alt="">
            <p>{{ `${arrangement.title}` }}</p>
            <p>{{ `$${arrangement.price}` }}</p>
        </div>
    </div>

脚本

    import axios from "axios";
    
    export default {
        data() {
            return {
                arrangements: []
            }
        },
        mounted() {
            axios.get("http://localhost:1337/arrangements")
                .then(res => {
                    this.arrangements = res.data;
                })
                .catch(error => {
                    this.error = error;
                })
        },
        methods: {
            getImages(url) {
                return '/cms/public' + url;
            }
        }
    }

API 调用

编辑:

项目结构

我试图访问图像的前端代码是Arrangements.vue,而图像在cms/public/uploads

【问题讨论】:

  • 在开发者控制台中检查元素时,图像 src 是什么样的?网络标签中是否出现 404 错误?
  • 图像源是“/cms/public/uploads/imgurl.png”所以这是我所期望的。我回家后必须在网络选项卡中检查 404。
  • 我觉得你的src应该是相对的,以'../'开头

标签: vue.js strapi


【解决方案1】:

您需要使用 require 来获取图像。试试这个方法。

在你的情况下,你可以使用这种方式。

 getImages(url) {
      return require('../../../cms/public/' + url);
  }

注意:我认为您的图像路径是正确的。我习惯使用变量 @ 来访问 assets 文件夹,类似这样:

<img :src="require('@/assets/img/my_image.png')" />

【讨论】:

  • 任何时候我使用require,我都会得到Module not found: Error: Can't resolve '/cms' in 'C:\Users\reaga\Desktop\Projects\fly-away-garden\client\src\components'
  • 你能发布你的项目结构吗?
  • 检查我的编辑以查看项目结构
  • :src="require(../../../cms/public/${your_file_here});
  • 哇,非常感谢。我之前试过这个,但少了一个../。我忘了再上一级!
【解决方案2】:

试试这个

computed:{
 getImages(){
  var filename = this.arrangements
  return require(`/cms/public/${fileName}.png`);
 }
}

你必须把它放在计算中,这样当图像路径进来时它会重新加载图像,然后用 :src="getImages" 绑定它。

【讨论】:

  • 就像我在下面对 Vinicius 的帖子所说的那样,我在使用 require 时收到了 Module not found: Error: Can't resolve '/cms' in 'C:\Users\reaga\Desktop\Projects\fly-away-garden\client\src\components'
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多