项目背景:项目的使用场景是面向信息安全相关部门,环境颇有可能没有公网,局域网并不稳定,因此没法使用七牛等CDN保存图片资源。从而采用引入本地资源的方式javascript
一般一张本地静态图片在vue中的写法是这样vue
<img src="@/assets/icon/demo.png">
可是,img标签若是在src路径中使用变量,会被编译为字符串,致使编译后的路径就是咱们写上去的字符串形式,好比你在data中定义了一个变量src,而后在img标签中引用java
//data中定义变量src data() { return { src: 'demo' } } //模版中的标签 <img src="@/assets/icon/" + src + ".png">
你会发现这个时候图片并无被加载出来,浏览器中这张图片的地址直接显示'@/assets/icon/demo.png',也就是没有通过编译的步骤,直接将咱们的输入看成字符串显示程序员
在实际开发中,不免会须要动态生成图片路径的场景,那么如何正确显示图片呢?浏览器
//使用import引入 import pic1 from '@/assets/icon/demo1.png' import pic2 from '@/assets/icon/demo2.png' //在data中定义图片变量 data() { return { pic: {[ name: 'demo1', src: pic1, ], [ name: 'demo2', src: pic2, ]} } } //在HTML中使用 <img v-for="item in pic" :src="item.src" :alt="item.name"/>
图片能够正确显示,但须要图片名称和你引入的图片手动作好对应。做为一个程序员,固然不会使用这么low的操做了,因此就有了下文安全
require能够在代码中使用,因此咱们能够在获取数据的同时,为数对象增长一个src的属性ui
getData() {
this.data.forEach(ele => { ele.src = require('@/assets/icon/' + ele.name + '.png'); }) }
这就须要咱们规范本地图片的命名了,确保能最有效地获取到正确的图片路径
使用require的时候也须要注意一点:require内容不能使用变量,以下写法会直接致使编译报错this
let src = '@/assets/icon/demo.png'; require(src) //报错“. is not a module”
3.将本地资源放到static目录下引用spa
getData() {
this.data.forEach(ele => { ele.src = 'static/icon/' + ele.name + '.png' }) }