Vue3无法动态绑定图片问题

一、问题描述

今天写代码时发现<img>标签无法动态绑定图片

我的目录结构如下:

这两句代码可以正常运行:

<img src="../../assets/images/banner.png" style="height: 100px;width: 100px;">
<img src="@/assets/images/banner.png" style="height: 100px;width: 100px;">

可见我的路径没有问题,因此我把它改为动态路径:

<template>
  <div >
    <img :src="url" style="height: 100px;width: 100px;">
  </div>
</template>

<script setup>
import { ref } from 'vue'
const url = ref('../../assets/images/banner.png')
</script>

<style scoped>

</style>

这时候就不行了,只能显示个图片的框架,而图片没有出来

二、问题分析

我们打开F12,点击Network部分,可见图片是存在的:

路径“@/assets/images/banner.png”的信息:

状态码为304,路径不正确

路径“../../assets/images/banner.png”的信息:

状态码200,路径不正确

而正确的信息为:

状态码为304,路径为“http://localhost:5173/src/assets/images/banner.png

对比可见:

正确路径里面多了一个src,而其他两个写法都没有

因此是路径解析问题,但是前端和后端都没有报错,非常奇怪,现在问题已经解决了

三、解决办法

把相对路径改为以src开头的格式即可,新的代码如下:

<template>
  <div >
    <img :src="url" style="height: 100px;width: 100px;">
  </div>
</template>

<script setup>
import { ref } from 'vue'
const url = ref('src/assets/images/banner.png')
</script>

<style scoped>

</style>

如果有帮到你,请帮我点个赞,让更多人看到

谢谢

### Vue3动态绑定图片的实现方法Vue3 中,为了确保图片路径能够在同环境中正常解析并加载,推荐采用函数方式来动态绑定 `img` 标签的 `src` 属性。这种方式仅解决了开发环境与生产环境之间的路径差异问题,还提高了代码的可维护性和灵活性。 对于图片资源的引入,应当注意区分相对路径和模块路径的区别。直接使用类似于 `&#39;@/asset/image/xxx.png&#39;` 的写法,在某些情况下可能会导致构建工具无法正确识别资源位置[^2]。 #### 正确的做法如下: 通过定义一个辅助函数 `getImageUrl()` 来获取图片的真实URL地址,并将其返回值赋给 `img` 组件的 `src` 属性。此方法利用了 JavaScript 模块系统的特性,能够兼容 Webpack 或 Vite 等现代前端构建工具的工作机制。 ```html <template> <div> <!-- 使用 getImageUrl 函数传递参数 --> <img :src="getImageUrl(imagePath)" alt="example image"/> </div> </template> <script setup> import { ref } from &#39;vue&#39;; // 定义图像文件名变量 const imagePath = ref(&#39;xxx.png&#39;); /** * 获取指定路径下图片的实际 URL 地址 */ function getImageUrl(path) { return new URL(`/src/assets/images/${path}`, import.meta.url).href; } </script> ``` 上述代码片段展示了如何创建一个名为 `getImageUrl` 的函数用于处理图片路径转换逻辑。这里的关键在于调用了 `new URL()` 构造器配合模板字符串拼接出完整的静态资源访问链接,同时借助于 `import.meta.url` 提供当前模块的位置信息作为基础URI。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值