vue动态渲染图片src失效,引入图片失败的解决办法,以及原因详解

前言

我现在遇到了一个问题,就是在Vue里面动态渲染图片的src属性的时候,如果直接传递一个字符串路径的话,图片加载不出来,但是如果先用import引入那个路径,再把引入的变量传给src,就能正常显示。为什么会这样呢? 

这是我的img标签,imgPath.background就是我传递给img的值

这是图片路径

我的出错方案是将'@/assets/inquiry/portalPharmacist/finger.png'直接赋值给了img标签,这导致了失败

那么改如何解决呢?

解决方案

解决方案

  1. 通过import引入的finger赋值给imgPath.background,然后img就可以正常显示了
  2. 静态资源放在public目录,然后直接使用绝对路径,此时路径不会经过Webpack处理,直接指向public目录。

有些小伙伴会好奇,这是为什么?明明我已经给路径交给了src,可是为什么就是不显示

那么我们就来彻底搞懂他!

原因

了解问题的原理,我们要从一下原理开始

构建工具的资源处理机制

  • Webpack/Vite的静态分析:打包工具(如Webpack或Vite)在构建阶段会扫描代码中的静态资源引用(如importrequire。这些引用会被处理成最终部署路径(如添加哈希、压缩文件名等)。

  • 动态绑定的字符串路径:如果路径是通过字符串动态绑定的(如:src="imgPath",且imgPath是一个字符串),打包工具无法在构建阶段确定该路径对应的具体文件,因此不会处理这些资源,导致路径未被替换为正确的输出路径。

所以就会导致,如果你打开F12查看img的src时就会发现,它的src是’@/assets/inquiry/portalPharmacist/finger.png‘,这就意味着,打包工具并没有将你的路径识别为一个资源引用,而是将其当作字符串直接显示。

静态路径与动态路径的区别

可能还有小伙伴好奇,为什么我直接方在src里面的静态路径就可以正常显示呢?

这是因为:

Vue模板编译器会自动将静态路径转换,触发打包工具处理,生成正确的资源路径。

而这里传的 imgPath.background ,是一个字符串,打包工具无法识别是资源引用,就无法触发打包工具的处理啦!

总结

通过importrequire引入路径时,打包工具会处理资源并返回最终路径;直接使用动态字符串路径时,打包工具无法识别资源,导致路径未处理。理解构建工具的资源处理机制,选择显式引入或使用public目录,可解决动态图片加载问题。

如有遗漏,欢迎各位小伙伴评论区补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值