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. 核心逻辑:空值兜底 + 加载异常捕获,双重保障头像展示的稳定性。
相关推荐
张拭心20 分钟前
编程最强的模型,竟然变成了国产的它
前端·ai编程
爱勇宝26 分钟前
2026一人公司生存指南:用AI大模型,90天跑出你的第一条现金流
前端·后端·架构
fe小陈29 分钟前
简单高效的状态管理方案:Hox + ahooks
前端
我叫黑大帅35 分钟前
Vue3和Uniapp的爱恨情仇:小白也能懂的跨端秘籍
前端·javascript·vue.js
Panzer_Jack36 分钟前
如何用 WebGL 去实现一个选取色彩背景图片透明化小工具 - Pick Alpha
前端·webgl
GIS之路1 小时前
ArcGIS Pro 中的 Python 入门
前端
树獭非懒1 小时前
告别繁琐多端开发:DivKit 带你玩转 Server-Driven UI!
android·前端·人工智能
兆子龙1 小时前
当「多应用共享组件」成了刚需:我们从需求到模块联邦的落地小史
前端·架构
Qinana1 小时前
从代码到智能体:MCP 协议如何重塑 AI Agent 的边界
前端·javascript·mcp
Wect2 小时前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript