Vuejs - 检查图像网址是不是有效或损坏

Posted

技术标签:

【中文标题】Vuejs - 检查图像网址是不是有效或损坏【英文标题】: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 中实现?

【问题讨论】:

同理:onerror事件。 Detect when an image fails to load in javascript的可能重复 【参考方案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 而不是我们手动触摸它。

以上是关于Vuejs - 检查图像网址是不是有效或损坏的主要内容,如果未能解决你的问题,请参考以下文章

检查图像是不是有效(损坏)javaCV

即使 url 有效,使用 imgur api 获取损坏的图像

有啥方法可以让 PHP 检测到损坏的图像?

我可以在保存之前检查下载的图像是不是损坏吗?

VueJS 部署生产版本显示损坏的 png 图像

如何检查给定网址中是不是存在图像?