vue前端从api动态显示图片

时间:2021-03-10 22:53:36

标签: vue.js strapi

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

enter image description here

编辑:

项目结构

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

enter image description here

2 个答案:

答案 0 :(得分:0)

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

就您而言,您可以使用这种方式。

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

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

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

答案 1 :(得分:0)

试试这个

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

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