【问题标题】:Vuejs - Check if image url is valid or brokenVuejs - 检查图像网址是否有效或损坏
【发布时间】:2017-09-28 14:49:13
【问题描述】:

Angular 2 - Check if image url is valid or broken一模一样。

如何在 vuejs 中实现?

【问题讨论】:

标签: javascript vue.js vuejs2 vue-component


【解决方案1】:

Vue.js 有一个 @error 事件,你可以挂钩。来自 vuejs issue#3261。所以你可以这样做:

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

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

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

Edit2:真傻!它实际上是为许多 HTML 元素发出的原生 onerror 事件添加监听器的接口,类似于 &lt;input @blur="someHandler"&gt; 等。

【讨论】:

  • 我在 Vue 的文档中找不到任何关于 @error 的详细信息
  • @Asqan onerror&lt;img&gt; 元素可以发出的有效HTML 事件,因此@error(或v-on:error)只是Vue 处理onerror 事件的语法糖。这与为有效的 HTML 事件调用 &lt;button @click="clickHandler"&gt;&lt;input @blur="blurHandler"&gt; 或任何其他事件侦听器相同。 developer.mozilla.org/en-US/docs/Web/HTML/Element/…
【解决方案2】:

我使用了一个计算属性,它返回一个带有占位符 URL 的字符串,而不是像这样的 @error 处理程序。这样,如果 source 为 null 或未定义,则将加载占位符。

<img :src="source || computedPropertyString" />

【讨论】:

  • 这不适用于 source 已定义但该网址上不存在图像 (404) 或无法访问 (403) 的情况。
【解决方案3】:

看来@error 工作正常。我个人使用事件的方法来设置替代图像。

<img :src="imageUrl" @error="imageUrlAlt">

方法:

imageUrlAlt(event) {
    event.target.src = "alt-image.jpg"
}

来自 Vue.js issue#5404

最佳解决方案

<img :src="imageUrl" @error="imageUrl='alt-image.jpg'">

感谢大家提供宝贵的 cmets。

【讨论】:

  • 我很喜欢这个答案。它也可以完全内联而不会造成太多混乱。 &lt;img :src="viewModel.logo" @error="$event.target.src = '[source image]'" alt="Company logo" /&gt;
  • 更多的 Vue 方法是在 imageUrlAlt 处理程序中为 image 设置一个新值:this.image = 'alt-image.jpg',让 Vue 更新 DOM 而不是我们手动触摸它。
猜你喜欢
  • 2016-08-29
  • 2016-07-25
  • 2012-04-13
  • 2013-10-08
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
相关资源
最近更新 更多