【问题标题】:VueJS: Do not show div if image doesn't existVueJS:如果图像不存在,则不显示 div
【发布时间】:2020-10-24 15:15:29
【问题描述】:

我正在渲染一些 div,当图像不存在时我不想显示 div。

示例图片在这里:https://clips-media-assets2.twitch.tv/AT-cm%7C891283246-preview-480x272.jpg

我在想这样的事情:

<div v-show="twItem.imageurl">{{twItem.title}}</div>

但它不起作用。任何帮助将不胜感激。

【问题讨论】:

  • 可能是因为您的组件渲染速度比您将图像数据传递给twItem 更快,在这种情况下,您可以将twItem 定义为object 类似这样的twItem: {}
  • @DevCl9 当我使用 v-if 时没有错误,但它不起作用。
  • 'is not there'表示url字符串是空字符串还是404图片的url链接?
  • @dunhuang 当我点击链接clips-media-assets2.twitch.tv/…时,我得到了拒绝访问,所以应该是拒绝访问。

标签: javascript vue.js nuxtjs


【解决方案1】:

这个任务不是原始的。

不管你用v-if还是v-show,都比较同一个东西,但结果不同。 v-if="false" 根本不会渲染元素,而 v-show="false" 将渲染它,但隐藏。 (display: none;)

这里的问题是,您只需检查 twItem.imageurl 是否已设置,而不是图像是否已加载。

你可以做的是使用@load

<template>
  <div v-if="twItem.loaded">{{ twItem.title }}</div>
  <image :src="twItem.imageurl" @load="twItem.loaded = true">
</template>

更详细的解释请看这里:https://renatello.com/vue-js-image-loaded/

【讨论】:

  • 这会起作用 (+1)。 OP 也可以使用this article 进行更多解释
  • 谢谢,没有花时间寻找周密的@load 解释。我加了。
【解决方案2】:

使用v-if 代替v-show

<div v-if="twItem.imageurl">{{ twItem.title }}</div>

【讨论】:

  • 糟糕,我刚刚编辑了我的答案。使用:v-if 重试。它应该可以工作。
  • :v-bind 指令(HTML 属性操作)的简写语法。你实际上是在写v-bind:v-if= ...
  • :v-if 可能无效
  • 是的,不仅仅是可能。 :v-if 无效。
  • 指令没有:,用户直接使用&lt;div v-if="twItem.imageurl"&gt;{{twItem.title}}&lt;/div&gt;
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 2016-01-20
  • 2022-12-06
  • 1970-01-01
  • 2018-03-11
  • 2015-02-19
  • 2018-03-16
  • 2019-08-21
相关资源
最近更新 更多