Vue中关于图片路径的写法问题

本文解决Vue中使用v-html渲染图片路径时的问题,强调在Vue2与Vue3中图片存放位置的不同及正确路径写法。

工作中遇到的小问题,恶心了我很久,记录下来防止还有人踩坑。

v-html可以把html语言直接渲染出来,但其中带来一部分问题,html中的图片路径(即<img src="xxx">)如果要进行替换修改,该怎么做?

问题的重点在于,图片(或者说资源信息,包括文件啥的)的存储位置怎么表示?实测Vue中在这一块是不能进行绝对路径表示的,只能用相对路径

在Vue2里,图片放在static里,也就说你要改造项目,记得把图片文件夹放在static里。

在Vue3里,没有static了,图片文件夹就放在public下。

坑点来了!在写路径的时候,如果是图片路径,则不需要写出“public”

啥意思呢,举个例子:

    

<img src=\"../../public/img/1.png\" alt=\"\">

   一般这么写,代表的是当前的vue文件所在的位置,返回上一层目录,再返回上一层目录,然后在这层目录中选择public文件夹,选择里面的1.png。

   遗憾的是,这么写的话,你的图片压根显示不了,这是错误的路径写法。

   应改成

 <img src=\"../../img/1.png\" alt=\"\">

  这么写,表达的才是“当前的vue文件所在的位置,返回上一层目录,再返回上一层目录,然后在这层目录中选择public文件夹,选择里面的1.png”   

public不需要写出来!说实话,我没有搞懂这个简化有啥意义,而且还贼容易引起歧义...


更新于2022/04/16,实测,哪怕是非图片文件夹也不需要写public,反正不管怎么造,public就是得省略!!!

Vue3 中使用本地图片路径时,需要根据图片存放的位置以及是否需要动态引入来决定正确的写法。以下是几种常见的使用场景及对应写法: ### 使用相对路径引入本地图片(静态引入) 如果图片是静态引入,例如直接在 `<img>` 标签中使用,推荐使用相对路径路径写法需遵循 Vue3 的模块解析规则,确保路径指向 `src/assets` 目录下的文件: ```vue <template> <img src="./assets/images/1.png" alt="Static Image" /> </template> ``` 上述写法适用于图片路径固定且不需要动态变化的情况。Vue3 在构建时会自动处理 `src/assets` 目录下的资源,将其作为模块引入,确保路径正确解析 [^3]。 ### 动态引入本地图片 如果图片路径需要动态生成,例如根据变量拼接路径,可以使用 `new URL()` 的方式引入。该方法适用于 Vue3 的 `vite` 构建工具,能够正确解析本地路径并生成有效的资源链接: ```vue <template> <img :src="getImg(index)" alt="Dynamic Image" /> </template> <script> export default { data() { return { index: 0 }; }, methods: { getImg(index) { return new URL(`./assets/nncs2/jiantou${index + 1}.png`, import.meta.url).href; } } }; </script> ``` 上述代码中,`new URL()` 用于动态拼接图片路径,并结合 `import.meta.url` 确保路径解析的准确性。该方法仅适用于本地资源的动态加载,不适用于网络图片或 `public` 目录下的资源 [^2]。 ### 使用绝对路径引入图片(静态引入) 如果希望使用绝对路径引入图片图片应放置在 `public` 目录下,并在 `<img>` 标签中使用 `/` 开头的路径。这种方式适用于静态资源,如图标、第三方资源等: ```vue <template> <img src="/images/1.png" alt="Public Image" /> </template> ``` 上述写法中,图片必须存放在 `public` 目录下,且路径以 `/` 开头。`public` 目录下的资源不会经过 Webpack 或 Vite 的构建处理,而是直接复制到构建输出目录的根路径下。因此,这种方式适用于无需构建处理的静态资源 [^1]。 ### 动态路径引入图片(使用 `require`) 在 Vue2 中,动态路径通常使用 `require` 来引入图片资源。但在 Vue3 中,`require` 已不再推荐使用,建议使用 `new URL()` 替代。如果仍需使用 `require`,需确保路径是静态可解析的,否则会导致路径解析失败: ```vue <template> <img :src="imageUrl" alt="Dynamic Image" /> </template> <script> export default { data() { return { img: &#39;images/1.png&#39;, imageUrl: require(&#39;../../assets/&#39; + this.img) }; } }; </script> ``` 上述写法适用于 Vue2 或需要兼容 Vue2 的项目。在 Vue3 中,建议使用 `new URL()` 替代 `require`,以确保路径解析的准确性和构建工具的兼容性 [^1]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值