vue中html标签怎么放置图片src,解决Vue中img标签src属性绑定问题

作者分享了在Vue项目中,如何从静态网页结构切换到动态数据获取时,图片路径调整的经历。关键在于将静态资源如图片放置在`static`文件夹下,以确保正确访问。通过修改服务器返回数据并调整`src`绑定,解决了图片无法显示的问题。

最近刚刚完成了自己的毕业设计项目,整理一下过程中遇到的问题吧~~~

我做的是一个基于Vue的信息资讯展示与管理平台,显示首页、详情页等的文章内容时就涉及到了图片展示,项目初始时我搭建的是静态网页结构,这时的图片是可以正常显示的,但是能够通过axios发送请求获取数据后,想通过 :src 的方式绑定图片路径是却失败了,于是我查询了一些相关文章,找到了解决的办法。

静态结构时的代码,图片可以正常显示:

arrow0-0.png

数据绑定时候的代码,图片无法显示:

// 数据库表中article_file中存储的值的格式为‘../../../src/static/font/arrow0-0.png’

于是我开始找原因:目录结构是有问题的,回头看vue-cli的文件结构,发现其中有一个叫做static的文件夹。图片一类的静态文件,应该放在这个static文件夹下,这个文件夹下的文件(夹)会按照原本的结构放在网站根目录下。这时我们再去使用/static绝对路径,就可以访问这些静态文件了。

所以,我将图片这种静态资源文件放到了static目录下,然后将服务器返回的数据在渲染到页面前进行修改。代码如下:

b5b9ad41ddccff9fe3ce24f89374f09b.png

这时就发现,图片成功地渲染到了页面上,目标达成。

另外,如果说不想调整目录结构的话,还有一个方法 -- 直接传入图片编码。

html部分:

js部分:

imgUrl = require(‘./assets/logo.png‘)

这样可以读到项目路径下的图片,但是,因为CommonJS只允许使用字符串字面量,所以这种方法使用起来不够灵活。

总而言之,将静态文件放入static文件夹下还是最好的办法。

<think>好的,用户想了解在Vue中如何动态设置img标签src属性。我之前看到过相关的引用资料,现在需要整理这些信息,给出清晰的步骤。首先,用户可能遇到的问题是直接绑定路径字符串不生效,需要解释为什么必须使用require或者import。 根据引用5中的例子,直接使用相对路径字符串会导致图片无法显示,正确方法是用require包裹路径。这点需要强调,因为Vue在处理静态资源时,如果路径不是被模块系统处理的话,会被当作普通字符串,导致路径解析错误。 然后,引用1和4提到,可以通过在数据属性或者计算属性中使用require来动态绑定。比如在data里直接定义imgUrl为require的路径,或者在计算属性中根据条件返回不同的require路径,如引用2中的例子,使用计算属性结合三元表达式动态切换图片。 另外,在Vue3中,引用3指出使用new URL和import.meta.url的方法来生成正确的路径,这种方法适用于动态拼接路径的情况,比如根据变量名加载不同的图片。需要区分Vue2和Vue3的不同处理方法,因为用户可能使用的版本不同。 还要提到使用import引入图片的方式,如引用4中的方法,在编译时加载图片,适用于已知路径的情况,这样可以提升效率。但动态性不如require和URL方法。 总结步骤的话,应该分点列出不同方法,包括直接使用require、计算属性Vue3的特殊方法、import引入等。同时,注意事项里需要说明路径别名如@的使用,以及动态拼接时的处理。 可能用户遇到的问题包括路径错误、打包后图片丢失,或者动态切换不生效,所以需要针对这些情况给出解决方案。比如在Vue3中,动态路径拼接推荐使用getImageUrl函数,避免打包后的路径问题。 最后,生成相关问题,帮助用户进一步了解优化方法和常见错误,比如如何动态切换图片,打包后的路径处理,或者不同版本Vue的区别。</think>在Vue中动态绑定img标签src属性时,需根据项目版本和场景选择合适方法。以下是具体实现步骤和注意事项: ### 一、基础方法(Vue2/Vue3通用) 1. **使用`require`直接绑定** 在数据属性或计算属性中通过`require`引入图片路径: ```vue <img :src="imgUrl"> <script> export default { data() { return { imgUrl: require(&#39;@/assets/images/example.jpg&#39;) // @表示src目录 } } } </script> ``` 此方法适用于**运行时动态加载**,支持条件判断[^5][^4] 2. **计算属性动态切换** 通过三元表达式实现条件判断: ```vue <img :src="dynamicImage"> <script> export default { computed: { dynamicImage() { return this.isActive ? require(&#39;@/assets/active.png&#39;) : require(&#39;@/assets/inactive.png&#39;) } } } </script> ``` 这是处理动态切换场景的推荐方式[^2] ### 二、Vue3专用方法 使用`new URL`配合`import.meta.url`: ```vue <template> <img :src="getImageUrl(&#39;example.jpg&#39;)"> </template> <script setup> const getImageUrl = (name) => { return new URL(`./assets/${name}`, import.meta.url).href } </script> ``` 此方法可正确解析打包后的路径,适合**动态拼接文件名**的场景[^3] ### 三、优化方案 1. **import静态引入(编译时加载)** ```javascript import staticImg from &#39;@/assets/logo.png&#39; // 在data/computed中返回staticImg ``` 适用于已知固定路径,具有更好的加载性能[^4] 2. **路径别名配置** 在`vite.config.js`或`vue.config.js`中配置: ```javascript // vite示例 export default defineConfig({ resolve: { alias: { &#39;@img&#39;: path.resolve(__dirname, &#39;src/assets/images&#39;) } } }) ``` 使用:`require(&#39;@img/example.jpg&#39;)` ### 四、常见错误处理 | 错误现象 | 解决方案 | |---------|----------| | 开发环境显示但打包后404 | 使用require或new URL代替纯字符串路径[^5][^3] | | 动态拼接路径不生效 | Vue3使用`new URL`,Vue2使用`require.context` | | 图片加载闪烁 | 添加v-if判断或使用预加载技术 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值