Vue2.0学习——动态加载图片src的解决办法

首先先说明下VUE-CLI的资产静态状语从句的两个文件的区别,因为这对你理解后面的解决办法会有所帮助。

assets在项目编译的过程中会被webpack处理解析为模块依赖,只支持相对路径的形式,如<img src =“./ logo.png”>和background:url(./ logo.png),“ ./logo.png“是相对资源路径,将有webpack解析为模块依赖。

static在这个目录下文件不会被webpack处理,简单就是说存放第三方文件的地方,不会被webpack解析。他会直接被复制到最终的打包目录(默认是dist / static)下。必须使用绝对路径引用这些文件,这是通过config.js文件中的build.assetsPublic和build.assertsSubDirectory链接来确定的任何放在静态/中文件需要以绝对路径的形式引用:/静态[文件名] 

根据的WebPack的特性,总的来说就是静电放不会变动的,第三档的文件,声称放可能会变动的文件。

问题来了,用JS动态加载的资产或者本文件的图片出现404的状态码

<li v-for =“(item,index)in images”:key =“index”>
<img:src =“item.src”> </ li>
// JS部分
数据(){
  返回{
    图像:[{SRC: './ 1.png'},{./ 2.png}]
  }
}

跑起来发现图片不显示,错误码为404, 

原因:在webpack中会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法解析图片地址,然后npm运行dev或者npm运行构建之后导致路径没有被加工【被webpack解析到的路径都会被解析为/static/img/[filename].png,完整地址为本地主机:8080 /静态/ IMG / [文件名] .PNG】 

解决办法:

①将图片作为模块加载进去,比如图像:[{SRC:要求( './ 1.png ')},{SRC:要求(' ./ 2.png')}]这样的WebPack就能将其解析。

②将图片放到静态目录下,但必须写成绝对路径如图片:[{SRC:” /静态/ 1.png”},{SRC:” /静态/ 2.png”}]这样图片也会显示出来,当然你也可以通过在webpack.base.config.js定义来缩短路径的书写长度。


扫描二维码关注公众号,回复: 892345 查看本文章

当然你说当本地图片太多时,这样写岂不是很麻烦,那么其实我们是一这样简化操作的。

第一步:在静态里面新建一个JSON夹数文件  第二部:填写JSON文件,如图产品  第三部:将JSON引入响应的VUE文件中,解析引用就行了 
   新建JSON文件 

  填写JSON文件 

  引入JSON

猜你喜欢

转载自blog.csdn.net/qq_36575992/article/details/80340508