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. 核心逻辑:空值兜底 + 加载异常捕获,双重保障头像展示的稳定性。
相关推荐
Byron070718 小时前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js
css趣多多18 小时前
地图快速上手
前端
zhengfei61118 小时前
面向攻击性安全专业人员的一体化浏览器扩展程序[特殊字符]
前端·chrome·safari
码丁_11719 小时前
为什么前端需要做优化?
前端
Mr Xu_19 小时前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构
Byron070719 小时前
从 0 到 1 搭建 Vue 前端工程化体系:提效、提质、降本实战落地
前端·javascript·vue.js
哆啦code梦19 小时前
前端存储三剑客:localStorage、sessionStorage与Cookie解析
前端·前端存储
徐小夕@趣谈前端20 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
Data_Journal20 小时前
如何使用 Python 解析 JSON 数据
大数据·开发语言·前端·数据库·人工智能·php
德育处主任Pro20 小时前
纯前端网格路径规划:PathFinding.js的使用方法
开发语言·前端·javascript