美文网首页web前端一起学起来vue
Vue中img的src属性绑定与static文件夹

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

作者: almon123 | 来源:发表于2016-11-23 12:28 被阅读44027次

不少人在vue的开发中遇到这样一个问题: img的src属性绑定url变量,然而图片加载失败。
大部分的情况中,是开发者使用了错误的写法,例如:

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

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

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

不过,有时候即使使用了正确的语法,依旧无法显示图片,因为你的imgUrl使用了本地图片的路径。
例如,有下面一个文件结构:

图1 文件结构

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

imgUrl = './assets/logo.png'

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

图2 错误提示

看这个错误代码,我们发现,网页把根域名作为相对路径的根目录了,然而我们文件的路径是相对于项目文件的根目录的,当然就找不到了。
既然这样,那我们去找build后的dist文件夹。发现文件的结构是这样:

图3 dist
是不是说只要把url改成./static/img/logo.png就可以了呢?依然是不行的。打开img文件夹我们可以发现,所有的文件名后都被添加上了一个随机字符串,原始的文件名已经无法对应了。
那么,到底应该怎么加载本地图片呢?回头看vue-cli的文件结构,发现其中有一个叫做static的文件夹,尝试将logo.png放入这个文件夹,然后修改imgUrl:
imgUrl = '/static/logo.png'

成功读取到了logo.png. 执行npm run build后查看dist文件,发现logo.png原封不动地放在了根目录下。
原来,之前的目录结构是有问题的,图片一类的静态文件,应该放在这个static文件夹下,这个文件夹下的文件(夹)会按照原本的结构放在网站根目录下。这时我们再去使用/static绝对路径,就可以访问这些静态文件了。
另外,如果说想在不调整目录结构的情况下读取本地图片,还有一个方法,那就是直接传入图片编码。即:

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

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

相关文章

网友评论

  • 34a03db0db07:过期教程害死人,webpack3,请放到public目录下。比如logo.png放到该目录下,引用时的路径就是‘/logo.png。
  • 逆流成河wsy:动态路径的时候才会用到require()
  • VioletJack:图片不能读取而不能放在 static 中的时候,可以使用 `import url from "../../assets/img/EMS.png"` 来导入图片路径。
  • 3f82c33667bb:如果放到static目录那么怎么压缩图片?怎么生成hash文件名
    JasonWild:本来就是博主理解错了,static目录本来就是用来放静态资源的(要用绝对地址),其他想要压缩的支资源一定要require()或者import引入才可以的,这样webpack才会把文件放到资源图谱里面进行加载
  • 李悦之:刚还在想为啥图片有时行有时不行呢,原来和static文件夹有关
  • 到海边看花儿:不错, 赞. 解决了我的问题
  • 35f9284fb4be:太有用了!!谢谢
  • 5d6d88d48865:我也碰见这个问题了,🙏
  • 無聊々:非常感谢,花了几个小时没搞定的问题,作者一下点到重点了
  • 一只小松:问下楼主 src可以直接指定一张网路图片的地址吗?我这边试了加载不了
    贫下码农:网络图片把src写全就好了
    Healy励:可以的,我试过了
  • 51de7d434620:感谢作者

本文标题:Vue中img的src属性绑定与static文件夹

本文链接:https://www.haomeiwen.com/subject/kwzmpttx.html