Я подправил ответ кота. немного и заставил его работать.
Это решение основано на этом вопросе
Мы создадим новое изображение в памяти и используем событие загрузки, чтобы определить, когда загрузка изображения закончилась.
import { Directive, Input, Output, EventEmitter, ElementRef } from '@angular/core';
@Directive({
selector: '[appBackgroundImageLoaded]'
})
export class BackgroundImageLoadedDirective {
@Output() imageLoaded: EventEmitter<boolean> = new EventEmitter<boolean>(true);
constructor(private el: ElementRef) { }
ngAfterViewInit() {
const img = new Image();
const bgStyle = getComputedStyle(this.el.nativeElement).backgroundImage
const src = bgStyle.replace(/(^url\()|(\)$|[\"\'])/g, '');
img.src = src;
img.addEventListener('load', ()=> {
this.imageLoaded.emit(true);
});
}
}
И шаблон
<div id="mainDiv" class="sign-in" [ngStyle]="{'background-image': 'url(' + background_source + ')'}" appBackgroundImageLoaded (imageLoaded)="loaded()">
DEMO