vue 解决img图片路径存在但图片无法访问时显示错误的问题

文章目录

项目场景

在前端开发中,img 标签常用于展示用户头像,核心需求是优先加载用户自定义头像,无自定义头像时展示默认头像。

问题描述

常规开发中,我们会通过逻辑判断处理头像路径为空的情况,代码如下:

typescript 复制代码
<img :src="item.attachUrl || defaultUser" alt="用户头像"/>

上述代码仅能判断 attachUrl 是否为空,若 attachUrl 有值但对应的图片资源实际访问失败(如图片文件丢失、路径错误、网络问题等),页面中头像位置会显示图片加载失败的破损样式,影响用户体验。

原因分析

  1. item.attachUrl || defaultUser 仅做值是否为空的逻辑判断,无法检测图片资源的实际可访问性;
  2. 图片加载失败属于网络/资源层面的错误,需通过 img 标签的原生事件捕获这类异常。

解决方案

利用 img 标签的 error 事件监听图片加载失败的情况,触发事件时将图片地址替换为默认头像,具体实现如下:

1. 模板代码(Vue)

html 复制代码
<!-- 绑定src并监听error事件 -->
<img 
  :src="item.attachUrl" 
  alt="用户头像" 
  @error="handleImgError" 
/>

2. 逻辑处理(TypeScript)

typescript 复制代码
// 引入默认头像资源
import defaultUser from "./img/user-icon.png";

/**
 * 处理图片加载失败的逻辑
 * @param e - 图片error事件对象
 */
const handleImgError = (e: Event) => {
  const target = e.target as HTMLImageElement;
  // 替换为默认头像
  target.src = defaultUser;
  // 可选:重置图片样式,避免加载失败的占位样式
  target.style.display = "inline-block";
  // 可选:防止error事件循环触发(若默认头像也加载失败)
  target.onerror = null;
};

优化补充

为避免默认头像也加载失败导致 error 事件循环触发,在事件处理函数中添加 target.onerror = null,确保仅替换一次。

总结

  1. 单纯的空值判断无法覆盖图片路径有效但资源不可访问的场景,需结合 imgerror 事件处理;
  2. 图片加载失败时,通过事件对象替换 src 为默认头像,并可重置样式、阻断事件循环,保证用户体验;
  3. 核心逻辑:空值兜底 + 加载异常捕获,双重保障头像展示的稳定性。
相关推荐
阿帕琪尔几秒前
😎vite插件: 自动打包压缩图片和转webp(二)
前端·vite
思慕很大很大6 分钟前
浏览器基础知识-进程与线程
前端·浏览器
猩猩程序员11 分钟前
dial9:一个强悍的 Tokio 调试工具!!!
前端
gyx_这个杀手不太冷静30 分钟前
OpenCode 深度解析:架构设计、工具链集成与工程化实践
前端·架构·ai编程
m0_459252461 小时前
fastadmin动态渲染统计信息
开发语言·前端·javascript·php
该怎么办呢1 小时前
Source/Core/Matrix4.js
前端·javascript
小江的记录本1 小时前
【MyBatis-Plus】Spring Boot + MyBatis-Plus 进行各种数据库操作(附完整 CRUD 项目代码示例)
java·前端·数据库·spring boot·后端·sql·mybatis
于慨2 小时前
Capacitor
前端
IT凝冬2 小时前
liunx 的 centos7 安装ngin
前端
赵锦川2 小时前
大屏比例缩放
前端·javascript·html