思路:js生成图片,通过Promise catch捕获到图片异常,失败给默认图片路径。
//方法
// 判断图片是否存在
checkImgExists(item) {
return new Promise(function(resolve, reject) {
var ImgObj = new Image() //生成图片
let path= "images/" //图片路径
ImgObj.src = require(`@/${path}${item}.png`)
//捕获异常
ImgObj.onerror = function(err) {
reject(err)
}
// 成功 return路径
ImgObj.onload = function() {
resolve(ImgObj.src)
}
})
//使用举例
data.forEach(item => {
item.icon = item.appName //图片路径赋值
checkImgExists(item.icon).catch(() => {
item.icon = "default.png" //catch捕获异常,异常时设置默认图片
})
})
可以整个整个组件,例子如下
<template>
<img :src="src" />
</template>
<script>
export default {
props: {
// 图片名称
imgName: String,
//图片文件夹地址
setUrl: String,
//默认图片
defalultUrl: String,
},
data() {
return { src: "" }
},
watch: {
imgName: {
handler() {
this.getImgSrc() // 获取图片路径
},
immediate: true
}
},
methods: {
// 获取图片路径
getImgSrc() {
this.$utils
.checkImgExists(this.imgName, this.setUrl)
.then(src => {
//成功 赋值路径
this.src = src
})
.catch(() => {
// 失败 给默认图片
this.src = require(`@/${defalultUrl}.png`)
})
},
// 判断图片是否存在
checkImgExists(item) {
return new Promise(function(resolve, reject) {
var ImgObj = new Image() //生成图片
let path= "images/" //图片路径
ImgObj.src = require(`@/${path}${item}.png`)
//捕获异常
ImgObj.onerror = function(err) {
reject(err)
}
// 成功 return路径
ImgObj.onload = function() {
resolve(ImgObj.src)
}
})
}
}
}
</script>