关于Vue中img的src属性绑定的一些坑

摘要:
不少人在vue的开发中遇到这样一个问题:img的src属性绑定url变量,然而图片加载失败。1这样写肯定是不对的,正确的写法应该使用v-bind:?1不过,有时候即使使用了正确的语法,依旧无法显示图片,因为你的imgUrl使用了本地图片的路径。例如,有下面一个文件结构:现在,我们要在App.vue里使用位于src/assets/目录下的logo.png图片,于是,我们设:?回头看vue-cli的文件结构,发现其中有一个叫做static的文件夹,尝试将logo.png放入这个文件夹,然后修改imgUrl:?

不少人在vue的开发中遇到这样一个问题: img的src属性绑定url变量,然而图片加载失败。

大部分的情况中,是开发者使用了错误的写法,例如:

1
<img src="{{ imgUrl }}"/>

这样写肯定是不对的,正确的写法应该使用v-bind:

1
<img v-bind:src="imgUrl"/>

不过,有时候即使使用了正确的语法,依旧无法显示图片,因为你的imgUrl使用了本地图片的路径。

例如,有下面一个文件结构:

关于Vue中img的src属性绑定的一些坑第1张

现在,我们要在App.vue里使用位于src/assets/目录下的logo.png图片,于是,我们设:

1
imgUrl = './assets/logo.png'

奇怪的事情出现了,图片加载失败。查看网页源代码,发现一个错误:

关于Vue中img的src属性绑定的一些坑第2张

看这个错误代码,我们发现,网页把根域名作为相对路径的根目录了,然而我们文件的路径是相对于项目文件的根目录的,当然就找不到了。

既然这样,那我们去找build后的dist文件夹。发现文件的结构是这样:

关于Vue中img的src属性绑定的一些坑第3张

是不是说只要把url改成./static/img/logo.png就可以了呢?依然是不行的。打开img文件夹我们可以发现,所有的文件名后都被添加上了一个随机字符串,原始的文件名已经无法对应了。

那么,到底应该怎么加载本地图片呢?回头看vue-cli的文件结构,发现其中有一个叫做static的文件夹,尝试将logo.png放入这个文件夹,然后修改imgUrl:

1
imgUrl = '/static/logo.png'

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

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

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

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

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

免责声明:文章转载自《关于Vue中img的src属性绑定的一些坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇postman使用之三:API请求和查看响应结果从零搭建 ES 搜索服务(五)搜索结果高亮下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue中Axios的封装和API接口的管理

前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习。如果对原博主造成侵犯,我会立即删除。 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题,我们所要的说的axios查看更多关于 axios 的文章 的封装和api接口的统一管理,其实主要目的就是在帮助我们简化代码和利于后期的更新维护。 一、ax...

phpstorm 为静态方法添加提示

php开发的时候,会遇到魔术方法的使用,但是直接使用都是没有提示的,如何才能添加代码提示呢 比如: 直接使用静态方法调用不存在方法的时候,代码是没有提示的, 此时只需要在,当前的class添加 PHPDoc 的注释即可 /*** Class ShopConf* @package appcommon** 添加IDE提示,如新增加参数,需要增加提示** @me...

移动端及vue相关问题

1-pc端与移动端  PC下,html在默认情况下以可视区域宽度为基准。移动设备没有适配时,html宽度为980. 2-1像素还原 获取像素比: window.devicePixelRatio 计算缩放比:1 / window.devicePixelRatio 3-单位 px:固定值,绝对单位;%:相对单位;em:相对单位,相对于自身或者父级元素字体大小计...

前端框架Vue自学之axios(九)

我的最新博客在:Secret_wu's coding note 终极目标:掌握和使用Vue(全家桶:Core+Vue-router+Vuex) 本博客目的:记录Vue学习的进度和心得(axios) 内容:学习和使用axios,网络模块封装。 正文: axios 一、网络模块封装 1、网络请求 Vue中发送网络请求有非常多的方式,那么,在开发中,如何选择?...

(转)了解一下,各种图片格式的区别

  在开发过程中,经常涉及到要用到图片,但是图片有很多不同的格式,他们之间有什么区别呢,我们在使用的时候又该如何选择呢?本文介绍和比较几种常见图片文件格式的优缺点,并介绍不同的文件格式对应用程序性能的影响。 有损vs无损 图片文件格式有可能会对图片的文件大小进行不同程度的压缩,图片的压缩分为有损压缩和无损压缩两种。 有损压缩:指在压缩文件大小的过程中,损...

关于react实现类似vue keep-alive 的cache router的功能解决方案

// 问题来源 众所周知react是单页面应用,在路由发生变化的时候,她所对应的页面或者组件会被卸载。当路由加载的时候,原页面所有的数据都会重新加载 这在移动端的用户体验可能是一个重大灾难! 比如列表滚动到第20页或者tab切换第三个tab 再去滚动列表进入详情页,当你返回的时候你原来的浏览记录被重新加载了,这个体验会是非常差。 react官方...