【问题标题】:image not rendered when using ngIf使用 ngIf 时未渲染图像
【发布时间】:2025-12-19 17:15:07
【问题描述】:

我有这个基本脚本:

HTML:

<button ion-button (tap)="buttonclick()">Button</button>
<ion-img *ngIf="test" style="width: 20%; vertical-align: middle;" src="../assets/imgs/logo.png"></ion-img>

TS:

buttonclick()
{
  this.test = true;
}

我预期会发生什么:

单击按钮显示图像。

会发生什么:

单击该按钮会使图像应位于的位置出现一个灰色的小矩形,就好像找不到 img 源一样。离开视图并返回视图确实会显示图像。

我做错了什么或者我该如何解决这个问题? 非常感谢任何帮助!

更新:

查看源代码后,我注意到第一次为图像分配了一个类img-unloaded。当我离开视图并返回时,类更改为img-loaded,使图像出现。我想这是一个离子的东西......?如何避免这种行为?使用img 标记而不是ion-img 可以解决问题,但我更愿意使用ion-img 标记。

【问题讨论】:

  • 如果您删除*ngIf="test",它会显示吗?
  • 替换为“assets/imgs/logo.png”。
  • 尝试使用ngClass 而不是这个并添加简单的切换显示:无/块;应该让它工作。或者查看devtools中的img src,它可能指向错误的路径,导致这种行为
  • 并检查是否实际触发了buttonclick(使用console.log)
  • Removing *ngIf="test" 正确显示了图像,所以我认为“../assets/”部分是正确的。控制台告诉我按钮已触发。我会尝试使用 ngClass 并告诉你。

标签: angular ionic-framework


【解决方案1】:

您应该使用&lt;img&gt;,正如doc 所述:

注意:ion-img 只能在 virtual-scroll 内部使用

这是一个有效的example

【讨论】:

  • 谢谢!不知道 ion-img 仅用于虚拟滚动。
【解决方案2】:

尝试使用 img 标签。

<img *ngIf="test" style="width: 20%; vertical-align: middle;" src="../assets/imgs/logo.png">

【讨论】: