You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前端如何在图片触发404错误时跳过该图片

Vue中动态加载图片时检测404并隐藏失效图片

可以通过监听图片的error事件,结合Vue的数据绑定标记图片有效性,再用v-if控制是否显示。以下是两种实现方式:

方式一:直接在模板中处理

<template>
  <div v-for="(n, index) in 5" :key="index">
    <img 
      v-if="validImages.includes(n)" 
      :src="`image_url_${n}.jpg`" 
      @error="handleImageError(n)"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      validImages: [1, 2, 3, 4, 5] // 初始默认所有图片有效
    }
  },
  methods: {
    handleImageError(n) {
      // 加载失败时移除对应编号,v-if会自动隐藏该图片
      const idx = this.validImages.indexOf(n)
      if (idx !== -1) {
        this.validImages.splice(idx, 1)
      }
    }
  }
}
</script>

方式二:封装成可复用组件(推荐)

先创建图片组件ValidImage.vue:

<template>
  <img 
    v-if="isValid"
    :src="src" 
    @error="isValid = false"
  />
</template>

<script>
export default {
  props: ['src'],
  data() {
    return {
      isValid: true
    }
  }
}
</script>

再在父组件中使用:

<template>
  <div v-for="(n, index) in 5" :key="index">
    <ValidImage :src="`image_url_${n}.jpg`" />
  </div>
</template>

<script>
import ValidImage from './ValidImage.vue'

export default {
  components: {
    ValidImage
  }
}
</script>

关于require(url)无效的原因

require()是Webpack的静态资源导入方法,仅能处理编译时已知路径的资源。你是动态生成图片URL,编译阶段无法确定具体资源路径,因此require()不生效,必须通过浏览器的图片加载事件检测有效性。

内容的提问来源于stack exchange,提问作者user16365685

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:10:11