Vue中img的src属性绑定与static文件夹

本文介绍在Vue项目中如何正确加载静态资源,包括将图片等资源放置于static文件夹下并使用绝对路径访问,以及通过require方法读取本地图片并进行图片压缩的方法。文章强调推荐使用static文件夹来存放静态文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、其中有一个叫做static的文件夹,尝试将logo.png放入这个文件夹,然后修改imgUrl:

imgUrl = '/static/logo.png'

成功读取到了logo.png. 执行npm run build后查看dist文件,发现logo.png原封不动地放在了根目录下。 

图片一类的静态文件,应该放在这个static文件夹下,这个文件夹下的文件(夹)会按照原本的结构放在网站根目录下。这时我们再去使用/static绝对路径,就可以访问这些静态文件了。

2、另外,如果说想在不调整目录结构的情况下读取本地图片,还有一个方法,那就是直接传入图片编码。即:

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

这样可以读到项目路径下的图片,也能压缩图片,但是要注意,因为CommonJS只允许使用字符串字面量,所以这种方法的灵活性依旧很差,所以还是推荐将静态文件放入static文件夹下。 

转载于:https://my.oschina.net/u/2365397/blog/2990362

<think>我们在Vue2中绑定img文件夹下的图片路径,主要需要解决的是图片路径在开发环境和生产环境下的正确引用问题。根据引用[1]和引用[3],我们可以知道,在Vue2项目中,我们通常有两种方法来处理动态绑定的图片路径:1.使用require()方法(适用于图片位于src/assets目录下)2.将图片放在public/static目录下,然后使用绝对路径(适用于静态资源,且不会被webpack处理)根据你的描述,你有一个img文件夹,我们需要明确这个img文件夹的位置,因为不同的位置处理方法不同。假设你的图片文件夹在项目中的位置可能是:-在src目录下,比如src/assets/img或者src/img(此时我们通常使用require)-在public目录下,比如public/static/img(此时我们可以直接使用绝对路径)下面分别介绍两种方法:###方法1:使用require(适用于图片放在src目录下,例如src/assets/img)如果你的图片放在src/assets/img目录下,那么可以通过require来引入图片,因为webpack会处理src目录下的资源。例如:<img:src="require('@/assets/img/'+imageName)"alt="图片">注意:require中可以使用变量拼接,但是要注意,webpack在打包时无法预知所有可能的路径,因此不能使用完全动态的路径。所以,我们通常将路径的前缀固定,然后拼接变量(图片文件名)。而且,图片文件名需要是确定的,或者通过计算可以得到确定的字符串。示例代码:```html<template><div><img:src="imgPath"alt="示例图片"></div></template><script>exportdefault{data(){return{//假设有一张图片名为'logo.png',放在src/assets/img目录下imageName:'logo.png',};},computed:{imgPath(){//使用require,注意路径是相对于当前文件的,但通常使用@表示src目录returnrequire(`@/assets/img/${this.imageName}`);}}};</script>```###方法2:使用public目录(适用于图片放在public/static目录下)如果你的图片放在public目录下的某个文件夹(比如public/static/img)中,那么你可以直接使用绝对路径。在public目录下的文件不会被webpack处理,它们会被直接复制到构建输出目录的根目录下。因此,在代码中可以直接通过绝对路径引用,例如:`/static/img/logo.png`。在Vue中,你可以这样绑定:<img:src="'/static/img/'+imageName"alt="图片">示例代码:```html<template><div><img:src="imgUrl"alt="示例图片"></div></template><script>exportdefault{data(){return{imageName:'logo.png',};},computed:{imgUrl(){//假设图片放在public/static/img目录下return`/static/img/${this.imageName}`;}}};</script>```###总结-如果你的图片经常变动,且不希望每次变动都重新构建(例如用户上传的图片),那么放在public目录下是更好的选择。-如果你的图片是项目资源,需要被打包优化(比如压缩等),那么放在src/assets目录下,并使用require。请根据你的实际情况选择合适的方法。§§相关问题§§1.在Vue2中,使用require绑定图片路径时出现404错误,可能是什么原因?2.如何选择将图片放在public目录还是assets目录?3.Vue2项目打包后public目录下的图片路径错误,如何解决?4.在Vue2中,如何动态绑定一组图片路径?</think> ### 在 Vue 2 中正确绑定 img 文件夹图片路径的两种方法 #### 🖼️ 方法一:使用 `require()`(推荐) 适用于图片存放在 `src/assets/img` 目录: ```vue <template> <img :src="localImage" alt="示例图片"> </template> <script> export default { data() { return { localImage: require("@/assets/img/photo.png") // 👈 关键代码 } } } </script> ``` **说明**: 1. 使用 webpack 的 `require()` 处理本地图片路径 2. `@/` 表示 `src/` 目录的别名 3. 适用场景:固定图片路径的绑定 #### 📂 方法二:使用 public 目录(适用于动态路径) 将图片放在 `public/img` 目录: ```vue <template> <img :src="'/img/' + dynamicImageName" alt="动态图片"> </template> <script> export default { data() { return { dynamicImageName: "banner.jpg" // 👈 图片名可动态变化 } } } </script> ``` **文件目录结构**: ``` public/ └── img/ ├── banner.jpg └── logo.png ``` **说明**: 1. public 目录内容会直接复制到打包后的根目录 2. 可通过拼接字符串实现动态绑定 --- ### ⚠️ 注意事项 1. **路径类型**: - `src/assets`:项目资源文件(需通过 `require` 处理) - `public`:静态资源目录(直接访问) 2. **路径差异**: ```js // public 目录引用 :src="'/img/photo.png'" // 正确 → 打包后路径 /img/photo.png // assets 错误引用 :src="assets/img/photo.png" // ❌ 打包后路径错误 ``` 3. **最佳实践**: - 少量固定图片 → 用 `require()` + `assets` 目录 - 大量动态图片 → 用 `public/img` 目录 - 外部图片 → 直接使用完整 URL --- ### 📄 补充说明 当需要在 `v-for` 中绑定动态图片路径时: ```vue <template> <div v-for="item in list" :key="item.id"> <img :src="getImagePath(item.img)"> </div> </template> <script> export default { methods: { getImagePath(name) { // public 目录方案 return `/img/${name}.png` // assets 目录方案 // return require(`@/assets/img/${name}.png`) } } } </script> ``` [^1]: 引用[1] [^2]: 引用[2] [^3]: 引用[3] --- ### 🔍 相关问题 1. Vue 2 中为什么在 `assets` 目录直接使用相对路径绑定图片会失败? 2. 如何配置 webpack 别名以简化 Vue 2 中的图片路径引用? 3. 在 Vue 2 项目打包后,如何解决 public 目录下的图片资源加载路径错误问题? 4. 除了 `<img>` 标签,Vue 2 中还有哪些需要特殊处理的本地资源引用场景? 5. 如何在 Vue 2 的 CSS 中正确引用 `assets` 和 `public` 目录的图片?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值