Вы можете создать директиву, которая связывает src
и повторяет попытку (устанавливает значение NULL и снова устанавливает значение в привязке с тайм-аутом) на error
.Вот, например, что-то очень похожее на то, что вам нужно, и очень хорошая отправная точка: https://medium.com/@sub.metu/angular-fallback-for-broken-images-5cd05c470f08
В основном он использует запасной URL-адрес в случае сбоя src.
Примерно так (быстро модифицируется, не тестируется):
import { Directive, OnDestroy, Input, ElementRef } from '@angular/core';
@Directive({
selector: 'img[retrySrc]',
host: {
'(error)': 'loadError()',
'(load)': 'clearTimer()',
}
})
export class RetrySrcDirective implements OnDestroy {
private _retrySrc: string;
private _timer;
constructor(
private element: ElementRef<HTMLImageElement>,
) {
}
@Input()
set retrySrc(value: string) {
this.clearTimer();
this._retrySrc = value;
this.element.nativeElement.src = value; //each set on src triggers a new request in google Chrome
}
ngOnDestroy() {
this.clearTimer();
}
loadError() {
this.clearTimer();
this._timer = setTimeout(() => this.element.nativeElement.src = this._retrySrc, 5000);
}
clearTimer() {
if (this._timer) {
clearTimeout(this._timer);
delete this._timer
}
}
}
, и вы используете его как:
<img [retrySrc]="'https://MyUrl/thumbnails/'+blob.name">
В качестве альтернативы вы можете периодически выполнять HttpClient
запросы в директиве и устанавливать src, как только выполучить ответ 200 (пока что используйте src по умолчанию).