Vue 动态加载本地图片 404 的问题

今天在 vue 文件中动态引入本地图片时发现路径没有问题但是一直 404

template 部分如下,使用 v-for 动态加载,数据存储在 setup 中的 nearbyItems 数组内

复制代码
<template>
    <div class="nearby">
        <div class="title">附近店铺</div>
        <div v-for="item in nearbyItems" :key="item.id" class="nearby-item">
            <div class="left">
                <img :src="item.logo" alt="" class="shop-logo" />
            </div>
            <div class="right">
                <div class="shop-title">{{ item.title }}</div>
                <div class="tags">
                    <span v-for="(tag, index) of item.tags" :key="index" class="tag-item">{{ tag }}</span>
                </div>
                <div class="promotion">{{ item.promotion }}</div>
            </div>
        </div>
    </div>
</template>
复制代码

script 部分代码如下

复制代码
<script>
export default {
    name: "Nearby",
    setup(){
        const nearbyItems = [
            {
                id: 1,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
            {
                id: 2,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
            {
                id: 3,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
            {
                id: 4,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
            {
                id: 5,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
            {
                id: 6,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
            {
                id: 7,
                logo: "../../assets/img/shop-logo.png",
                title: "永辉超市",
                tags: ["月售一万+","起送¥0","基础运费¥5"],
                promotion: "VIP尊享满89元减4元运费券(每月3张)",
            },
        ];
        return{
            nearbyItems,
        }
    }
}
</script>
复制代码

 图片并没有加载出来,查看图片的地址显示 ../../assets/img/shop-logo.png ,通过v-bind 绑定的相对路径并不会被 webpack 的 file-loader 处理,只会做简单的文本替换,

常用的解决办法:

1. 使用 import 引入图片

复制代码
<img :src="src">

//使用import引入
import img from '../images/demo.png'

//data中定义变量src
data() {
  return {
    src: img 
  }
}
复制代码

 

2. 使用 require 动态加载

<img :src="src">

//data中定义变量src
data() {
  return {
    src: require('../images/demo.png')
  }
}

 

3. 较小的图片可以转为 base64 格式

 

结论:静态资源可以通过两种方式进行处理:

1.在JavaScript 被导入或在 template/CSS 中通过 相对路径被引用,这类引用会被 webpack 处理

2. 放置在 public 目录下通过绝对路径被引用,这类资源会被直接 copy ,不会经过 webpack 的处理

 

posted @   波波波维奇~  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示