从 api 开始在 vue 前端动态显示图像

Dynamically display images on vue front end from api

我正在尝试根据 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

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

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

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

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

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

试试这个

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

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