Angular Ionic 3如何知道是否加载了图像,以及在获取图像url路径时是否存在任何错误



我有一个Ionic 3应用程序,我正在从API服务器加载一些图像。在客户端中,我想知道图像是否已成功获取或加载,还想知道获取时是否有任何错误。

这是我使用纯html创建的带有角度模板的示例,没有任何js

<img hidden [src]="driverInfo?.user_avatar?.url | image:'original'" (load)="this.loadingImage = false">
<img [src]="driverInfo?.user_avatar?.url | image:'original'" *ngIf="!loadingImage" onError="this.src='assets/imgs/avatar-placeholder.png';" />

当我只使用下面的第二行代码并将(加载(事件转移到那里时。onError路径首先显示,这并不是因为图像仍在加载。我想在加载图像时显示一个微调器或加载程序。然后,当图像加载后,如果成功,则显示原始路径如果未在onError中显示

路径所以我知道这个代码一点都不好。这就是为什么我要解决这个问题。我只是创建了一个变通代码,它实现了我的目标,但不是一个好的实践。

所以在代码的第一行。我显示了一个隐藏的html文件。此代码的目的仅是在加载图像时触发,如果成功获取,则第二行是实际图像的显示位置,否则显示一些错误或图像占位符。

那么,如何使用Angular JS重构它呢?我会使用ViewChild和ElementRef来实现这一点吗?

如果有人能帮忙,我将不胜感激。提前谢谢。

我认为使用以下构造可以实现您想要的东西:

<img #thisImage src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" failedUrl="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" (error)="missingImage(thisImage.attributes.failedUrl.value)" onerror="this.src='https://via.placeholder.com/150'"/>

这里有stackblitz可以玩:https://stackblitz.com/edit/ionic-szz3nc

简而言之:

  1. 如果您想分配与"src"的原始值重复的附加属性,我使用了"failedUrl"。这是因为出现错误时,src将被替换为占位符安全url。

  2. 现在oneror-你想用占位符替换失败的url

  3. 使用(error(绑定,您可以调用一个方法,并将所需的任何内容传递给ts函数以进一步操作(就像我过去"报告"此类丢失的图像一样(。

如果这有帮助,请告诉我。

请注意,这种类型的代码风险极高,因为如果你犯了错误,这可能会导致错误循环(比如你的安全占位符url也不指向任何地方(。

除了前面的答案之外,"oneror;属性应该可以工作,fot.svg图像除外,所以请确保您没有将svg用于默认图像。

svg图像在";oneror;属性将在浏览器上工作,但不能使用cordova进行构建。

最新更新