kan*_*ano 23

Vue.js有一个@error你可以参与的活动.来自vuejs 问题#3261.所以你可以这样做:

<template>
   <img :src="avatarUrl" @error="imageLoadError" />
</template>

<script>
export default {
  methods: {
    imageLoadError () {
      console.log('Image failed to load');
    }
  }
};
</script>
Run Code Online (Sandbox Code Playgroud)

编辑:我发现这也适用于<audio>标签(我怀疑其他元素定义src属性并加载资产)!


Jak*_*cki 17

似乎@error 工作正常。我个人使用一种带有事件的方法来设置替代图像。

<img :src="imageUrl" @error="imageUrlAlt">
Run Code Online (Sandbox Code Playgroud)

方法:

imageUrlAlt(event) {
    event.target.src = "alt-image.jpg"
}
Run Code Online (Sandbox Code Playgroud)

来自 Vue.js问题#5404

最佳解决方案

<img :src="imageUrl" @error="imageUrl='alt-image.jpg'">
Run Code Online (Sandbox Code Playgroud)

感谢大家的宝贵意见。

  • 我非常喜欢这个答案。它也可以完全内联,不会造成太多混乱。`&lt;img :src="viewModel.logo" @error="$event.target.src = '[源图像]'" alt="公司徽标" /&gt;` (3认同)
  • 更多 Vue 方法是在“imageUrlAlt”处理程序中为“image”设置一个新值:“this.image = 'alt-image.jpg'”,让 Vue 更新 DOM,而不是我们手动触摸它。 (3认同)