【问题标题】:How to display an "image-not-found" image in case of v-img loading errors如何在 v-img 加载错误的情况下显示“图像未找到”图像
【发布时间】:2020-01-28 23:11:10
【问题描述】:

查看此代码笔以进行简单的 vuetify 设置。

https://codepen.io/khoulaiz/pen/gObJPxO?editors=1010

<template>
  <div id="app">
    <v-app>
      <v-content>
        <v-container>
          <v-row>
            <v-col v-for="i in images" :key="i" cols="4">
              <v-img max-height="150" max-width="150" :src="i" @error="errorHandler"/>
            </v-col>
          </v-row>
        </v-container>
      </v-content>
    </v-app>
  </div>
</template>

<scritp>
  new Vue({
    el: '#app',
    vuetify: new Vuetify(),
    data: () => ({
      images: [
        "https://via.placeholder.com/150",
        "https://via.placeholder.com/doesnotexist",
        "https://via.placeholder.com/152"
      ]
    }),
    methods: {
      errorHandler(url) {
        images[1] = "https://via.placeholder.com/151"
        this.$forceUpdate()
    }
  }
})
</script>

中间的图片将无法加载。我有一个错误处理程序,我想用工作图像替换失败图像的 src 属性,并且我想强制重新加载图像。

我能够替换失败图像的 src,但我尝试强制重新加载 v-img 的所有尝试都失败了。

为什么我没有得到对无法加载的 v-img 的引用?相反,我得到了失败的 url,这无助于我找到失败的元素。 :-(

请告诉我,如何强制第二张图片显示备用图片。请注意,图像应该是 v-for 循环的一部分。

【问题讨论】:

    标签: vuejs2 vuetify.js


    【解决方案1】:

    您需要使用 this.

    将您的 errorHandler 更改为以下内容应该可以解决问题

    errorHandler(url) {
      this.images[1] = "https://via.placeholder.com/151"
      this.$forceUpdate()
    } 
    

    【讨论】:

    • 非常感谢,这就是我所缺少的。
    【解决方案2】:

    您可以使用ref,这样您就可以轻松访问您的html 对象。如下所示

     <v-col v-for="i in images" :key="i" cols="4">
              <v-img max-height="150" max-width="150" :src="i" :ref="'img_' + i" @error="errorHandler(i)"/>
     </v-col>
    

    您需要设置唯一的 ref 并将该唯一的 ref 传递给 errorHandler 参数。

    从您的 errorHandler 中,您可以获取该参数并通过设置新 src 的 ref 检索图像对象 dom

    errorHandler(i) {
        this.$refs['img_' + i][0].src = "https://via.placeholder.com/151"
    }
    

    【讨论】:

    • 我知道了,谢谢。但问题不在于 src 属性的引用或更新。问题是加载不起作用时刷新图像。我无法进行强制更新或触发更新图像的显示。尝试自己更改代码笔,以便在发生错误后显示图像。
    • 这不是我的问题,但是您的解决方案帮助我解决了另一个问题,所以谢谢,您的解决方案帮助我解决了另一个谜题?
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2015-09-17
    • 2017-08-27
    相关资源
    最近更新 更多